{"id":77474,"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic","ecosystem":"npm","repository_url":null,"issues_count":46,"created_at":"2025-11-27T02:00:45.802Z","updated_at":"2025-11-27T02:00:45.802Z","purl":"pkg:npm/@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic","unique_repositories_count":42,"unique_repositories_count_past_30_days":1,"recent_issues":[{"uuid":"4061953303","node_id":"PR_kwDORk0y687J5de2","number":4,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /book-manager-frontend","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-03-12T20:10:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-03-12T03:58:14.000Z","updated_at":"2026-03-12T20:10:58.000Z","time_to_close":58362,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.2.3"}],"path":"/book-manager-frontend","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/93c6dc6395d681dacd1dbbc46b95773038b6c32f\"\u003e\u003ccode\u003e93c6dc6\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(http): Improves base64 encoding/decoding with feature detect...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/76431ed3e3bd8bf90ac2fb481152a33587187037\"\u003e\u003ccode\u003e76431ed\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003ccode\u003e277ade9\u003c/code\u003e\u003c/a\u003e fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/aeb9b819d2cda782de85338dc9a5457c11e51bfe\"\u003e\u003ccode\u003eaeb9b81\u003c/code\u003e\u003c/a\u003e refactor(http): Improves base64 encoding/decoding with feature detection (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67\"\u003e#67\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecf0bb466875d17e0823f2d793491c6f354d6c34\"\u003e\u003ccode\u003eecf0bb4\u003c/code\u003e\u003c/a\u003e test(http): refactors HTTP client tests to use TestBed and providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003ccode\u003ee2e9a9a\u003c/code\u003e\u003c/a\u003e fix(core): adds transfer cache to httpResource to fix hydration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70e4c7fbabb45277cf76ee138c0be275beec7919\"\u003e\u003ccode\u003e70e4c7f\u003c/code\u003e\u003c/a\u003e refactor(common): log a warning when a KeyValuePipe receives a signal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2eeeabb7606900ad4fe8e3370d73f6add985f35d\"\u003e\u003ccode\u003e2eeeabb\u003c/code\u003e\u003c/a\u003e fix(common): fix LCP image detection with duplicate URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c4deaa52bb42130f90126f55786331aa8b4f7dc\"\u003e\u003ccode\u003e3c4deaa\u003c/code\u003e\u003c/a\u003e refactor(common): log a warning when a JsonPipe receives a signal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a8aab6480962f18ff0b28b5e46358ff8d43745c9\"\u003e\u003ccode\u003ea8aab64\u003c/code\u003e\u003c/a\u003e refactor(core): remove outdated TODO comments referencing TypeScript 2.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4a9b715b3abd3e51184937f764376883d6bb98a1\"\u003e\u003ccode\u003e4a9b715\u003c/code\u003e\u003c/a\u003e test(forms): cover transformedValue without FormField context\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003ccode\u003e670d166\u003c/code\u003e\u003c/a\u003e feat(forms): add 'blur' option to debounce rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23cb9a4291dc7ee0db3a78416b5ca2b51cfad1ac\"\u003e\u003ccode\u003e23cb9a4\u003c/code\u003e\u003c/a\u003e refactor(forms): address feedback\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0a863ba03f5eb83f383f647b7015bc3640072a1d\"\u003e\u003ccode\u003e0a863ba\u003c/code\u003e\u003c/a\u003e refactor(forms): hide adapter in public options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fe7b26e403febfe2662828945d41bc4567cbcc8b\"\u003e\u003ccode\u003efe7b26e\u003c/code\u003e\u003c/a\u003e docs(forms): transformedValue parse error wiring\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bdfb60f3e33065e047183dc1890c36e527e2b304\"\u003e\u003ccode\u003ebdfb60f\u003c/code\u003e\u003c/a\u003e fix(forms): use consistent error format returned from parse\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/631f60d1f9be72cb68330308a6ff18cc195babb8\"\u003e\u003ccode\u003e631f60d\u003c/code\u003e\u003c/a\u003e fix(forms): preserve parse errors when parse returns value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/567f292e8e0f9d2b5ddebadfa1c6d6dd6c456f39\"\u003e\u003ccode\u003e567f292\u003c/code\u003e\u003c/a\u003e fix(forms): support custom controls as host directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dcb9af6dfabb11591df0956ffcba753b2f5933f9\"\u003e\u003ccode\u003edcb9af6\u003c/code\u003e\u003c/a\u003e test(forms): \u003ccode\u003e[formField]\u003c/code\u003e synchronizes with a host directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fd956f675a36236ca1d94644acc41e8b55db4cba\"\u003e\u003ccode\u003efd956f6\u003c/code\u003e\u003c/a\u003e refactor(forms): simplify destroy subject handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/76431ed3e3bd8bf90ac2fb481152a33587187037\"\u003e\u003ccode\u003e76431ed\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003ccode\u003e277ade9\u003c/code\u003e\u003c/a\u003e fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/11767cabe48606a1f575d50b8af79b8bbb35a852\"\u003e\u003ccode\u003e11767ca\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/85122cb12d30141aa3abb997c4b3ee31713ec07b\"\u003e\u003ccode\u003e85122cb\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f4469ad583a97c39843309270095c55f0a758692\"\u003e\u003ccode\u003ef4469ad\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/84adb2fb3b3c0fa33f2dce44736d0ce130c44349\"\u003e\u003ccode\u003e84adb2f\u003c/code\u003e\u003c/a\u003e refactor(router): Permit deferring commit of traversal navigations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/17da2c392e9cbed2949153319ba3f5f777023af6\"\u003e\u003ccode\u003e17da2c3\u003c/code\u003e\u003c/a\u003e docs(docs-infra): remove \u003ccode\u003etoString\u003c/code\u003e from the API docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5b8a403220dd565ad8841849e4ac7891eda7b7c4\"\u003e\u003ccode\u003e5b8a403\u003c/code\u003e\u003c/a\u003e build: update rules_browsers digest to ceb5275\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81cabc14777a3b4966c29d60e1505aca8c29b71c\"\u003e\u003ccode\u003e81cabc1\u003c/code\u003e\u003c/a\u003e feat(core): add support for TypeScript 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0f47fda51bd34bce73195e46aed874001d47bcaa\"\u003e\u003ccode\u003e0f47fda\u003c/code\u003e\u003c/a\u003e test(router): move timeout and autoTick helpers to shared testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/11767cabe48606a1f575d50b8af79b8bbb35a852\"\u003e\u003ccode\u003e11767ca\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3867cd85545bfb5bde9e92d46467651337b2b7ae\"\u003e\u003ccode\u003e3867cd8\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a0f2725197886715a44062f6a4c36f9c5894605\"\u003e\u003ccode\u003e5a0f272\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): adds browserUrl input support to router links\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/68ba9c45cb05ee2cc178b17b66f5440677511e8e\"\u003e\u003ccode\u003e68ba9c4\u003c/code\u003e\u003c/a\u003e test(router): remove provider zoneless from tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9505541d32e453b144392b7c7db557d2a14c9794\"\u003e\u003ccode\u003e9505541\u003c/code\u003e\u003c/a\u003e feat(router): adds browserUrl input support to router links\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Kushanyasiru97/book-manager-website/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Kushanyasiru97/book-manager-website/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kushanyasiru97%2Fbook-manager-website/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"},{"uuid":"3944054847","node_id":"PR_kwDORMRbzM7D6YhI","number":5,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /deck","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-15T13:04:38.000Z","updated_at":"2026-02-15T13:04:47.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.1.4"}],"path":"/deck","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/19542a30b132ffc56aa55ec85406a43cd56bf639\"\u003e\u003ccode\u003e19542a3\u003c/code\u003e\u003c/a\u003e test(common): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003ccode\u003e3905015\u003c/code\u003e\u003c/a\u003e fix(http): correctly parse ArrayBuffer and Blob in transfer cache\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f5c233f1d760d91ac3cf9dd12526730bb79dead\"\u003e\u003ccode\u003e6f5c233\u003c/code\u003e\u003c/a\u003e refactor(common): extract argument assertion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7242da24fbd709a5ff08160790b767387758a644\"\u003e\u003ccode\u003e7242da2\u003c/code\u003e\u003c/a\u003e docs: reword docs on standalone.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6601f06e44189ec06d2651f4c326e8ba058273ce\"\u003e\u003ccode\u003e6601f06\u003c/code\u003e\u003c/a\u003e test(common): enables zoneless change detection in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2c3f3cc3360672010d8bcc3db5f5370146e322d1\"\u003e\u003ccode\u003e2c3f3cc\u003c/code\u003e\u003c/a\u003e refactor(forms): use optional chaining for safer method calls in form directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003ccode\u003e0d1acd0\u003c/code\u003e\u003c/a\u003e feat(forms): support signal-based schemas in validateStandardSchema\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1bf6bfc07f692b31647fb286f850b10ef4bd64b7\"\u003e\u003ccode\u003e1bf6bfc\u003c/code\u003e\u003c/a\u003e test(forms): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/04d518bc26ab96ab67108e42da5ba6e42d987c1c\"\u003e\u003ccode\u003e04d518b\u003c/code\u003e\u003c/a\u003e refactor(forms): work around internal issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bbd5cf82b16655866838cafbdf7945a2975bcfd5\"\u003e\u003ccode\u003ebbd5cf8\u003c/code\u003e\u003c/a\u003e test(forms): migrate reactive forms and value accessors to zoneless\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003ccode\u003e6f75b6e\u003c/code\u003e\u003c/a\u003e fix(forms): Resolves debounce promise on abort in debounceForDuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003ccode\u003e9f99b14\u003c/code\u003e\u003c/a\u003e fix(forms): only touch visible, interactive fields on submit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/31e6f0d7dcb4e644d765f85bf6f12d6c2fb829ad\"\u003e\u003ccode\u003e31e6f0d\u003c/code\u003e\u003c/a\u003e test(forms): submit behavior while validation is pending\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/223ff748915e591ca00792a4720ef93ca23261db\"\u003e\u003ccode\u003e223ff74\u003c/code\u003e\u003c/a\u003e build: don't substitute binary files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e6ea328cf4d737acb4c9e02783b943b90c28bdd1\"\u003e\u003ccode\u003ee6ea328\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003ccode\u003e49a36f4\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003ccode\u003ed6268c0\u003c/code\u003e\u003c/a\u003e fix(router): limit UrlParser recursion depth to prevent stack overflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003ccode\u003e21ecdc0\u003c/code\u003e\u003c/a\u003e fix(router): Do not intercept reload events with Navigation integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/18842266deb175d911c305e1fbf318b095666a00\"\u003e\u003ccode\u003e1884226\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Handle additional description format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1c68e66a7af6a4e3b9d456da6ec681928d05465\"\u003e\u003ccode\u003eb1c68e6\u003c/code\u003e\u003c/a\u003e docs: update examples to use \u003ccode\u003eisActive\u003c/code\u003e instead of deprecated `Router.isActiv...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003ccode\u003e7003e8d\u003c/code\u003e\u003c/a\u003e feat(router): Publish Router's integration with platform Navigation API as ex...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9e043decaf01dc622236814a2a2db73ec2bffe28\"\u003e\u003ccode\u003e9e043de\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/mohan-the-octocat/calm-outfit-concierge/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/mohan-the-octocat/calm-outfit-concierge/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohan-the-octocat%2Fcalm-outfit-concierge/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"3918438376","node_id":"PR_kwDOOx5JNs7Clu2i","number":68,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-02-09T22:28:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-02-09T22:23:17.000Z","updated_at":"2026-02-09T22:28:31.000Z","time_to_close":305,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.13","new_version":"21.1.3"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7242da24fbd709a5ff08160790b767387758a644\"\u003e\u003ccode\u003e7242da2\u003c/code\u003e\u003c/a\u003e docs: reword docs on standalone.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6601f06e44189ec06d2651f4c326e8ba058273ce\"\u003e\u003ccode\u003e6601f06\u003c/code\u003e\u003c/a\u003e test(common): enables zoneless change detection in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3dfdb71d65ed15e7d3e69ffe3b89b7b4cef9504a\"\u003e\u003ccode\u003e3dfdb71\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd58c4b667b74e978f5e5eae56af1204f84e2688\"\u003e\u003ccode\u003edd58c4b\u003c/code\u003e\u003c/a\u003e refactor(common): Add token to indicate whether precommit handler is supported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003ccode\u003ea6b8cb6\u003c/code\u003e\u003c/a\u003e feat(common): support custom transformations in ImageKit and Imgix loaders\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1bf6bfc07f692b31647fb286f850b10ef4bd64b7\"\u003e\u003ccode\u003e1bf6bfc\u003c/code\u003e\u003c/a\u003e test(forms): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/04d518bc26ab96ab67108e42da5ba6e42d987c1c\"\u003e\u003ccode\u003e04d518b\u003c/code\u003e\u003c/a\u003e refactor(forms): work around internal issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bbd5cf82b16655866838cafbdf7945a2975bcfd5\"\u003e\u003ccode\u003ebbd5cf8\u003c/code\u003e\u003c/a\u003e test(forms): migrate reactive forms and value accessors to zoneless\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003ccode\u003e6f75b6e\u003c/code\u003e\u003c/a\u003e fix(forms): Resolves debounce promise on abort in debounceForDuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003ccode\u003e9f99b14\u003c/code\u003e\u003c/a\u003e fix(forms): only touch visible, interactive fields on submit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/31e6f0d7dcb4e644d765f85bf6f12d6c2fb829ad\"\u003e\u003ccode\u003e31e6f0d\u003c/code\u003e\u003c/a\u003e test(forms): submit behavior while validation is pending\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/223ff748915e591ca00792a4720ef93ca23261db\"\u003e\u003ccode\u003e223ff74\u003c/code\u003e\u003c/a\u003e build: don't substitute binary files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26c2fe6db26cbe696e95ef7877118effef3b1bba\"\u003e\u003ccode\u003e26c2fe6\u003c/code\u003e\u003c/a\u003e refactor(forms): remove unused API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/58720dbc56ab986424ff88dc52db4fb739b438ac\"\u003e\u003ccode\u003e58720db\u003c/code\u003e\u003c/a\u003e refactor(forms): update Reactive Forms guide URL\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003ccode\u003ecb75f9c\u003c/code\u003e\u003c/a\u003e fix(forms): fix control value syncing on touch\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e6ea328cf4d737acb4c9e02783b943b90c28bdd1\"\u003e\u003ccode\u003ee6ea328\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003ccode\u003eec9dc94\u003c/code\u003e\u003c/a\u003e feat(platform-browser): add \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003ccode\u003e49a36f4\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003ccode\u003ed6268c0\u003c/code\u003e\u003c/a\u003e fix(router): limit UrlParser recursion depth to prevent stack overflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003ccode\u003e21ecdc0\u003c/code\u003e\u003c/a\u003e fix(router): Do not intercept reload events with Navigation integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/18842266deb175d911c305e1fbf318b095666a00\"\u003e\u003ccode\u003e1884226\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Handle additional description format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1c68e66a7af6a4e3b9d456da6ec681928d05465\"\u003e\u003ccode\u003eb1c68e6\u003c/code\u003e\u003c/a\u003e docs: update examples to use \u003ccode\u003eisActive\u003c/code\u003e instead of deprecated `Router.isActiv...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003ccode\u003e7003e8d\u003c/code\u003e\u003c/a\u003e feat(router): Publish Router's integration with platform Navigation API as ex...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9e043decaf01dc622236814a2a2db73ec2bffe28\"\u003e\u003ccode\u003e9e043de\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bcef77d9507e9778c35a6186ef4a8c1d67cd5992\"\u003e\u003ccode\u003ebcef77d\u003c/code\u003e\u003c/a\u003e fix(router): Fix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/CLRamey/Cinephoria/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/CLRamey/Cinephoria/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLRamey%2FCinephoria/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"},{"uuid":"3831152399","node_id":"PR_kwDOQ9EwHM6-FUO2","number":7,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-01-19T23:58:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T20:42:16.000Z","updated_at":"2026-01-19T23:58:22.000Z","time_to_close":11764,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.1.0"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3dfdb71d65ed15e7d3e69ffe3b89b7b4cef9504a\"\u003e\u003ccode\u003e3dfdb71\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd58c4b667b74e978f5e5eae56af1204f84e2688\"\u003e\u003ccode\u003edd58c4b\u003c/code\u003e\u003c/a\u003e refactor(common): Add token to indicate whether precommit handler is supported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003ccode\u003ea6b8cb6\u003c/code\u003e\u003c/a\u003e feat(common): support custom transformations in ImageKit and Imgix loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003ccode\u003ed879097\u003c/code\u003e\u003c/a\u003e feat(common): Add custom transformations for Cloudflare and Cloudinary image ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003ccode\u003e1ea5c97\u003c/code\u003e\u003c/a\u003e feat(forms): allow focusing bound control from field state\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/532633301b4677aa22a4b2cff3fcaa558a648b21\"\u003e\u003ccode\u003e5326333\u003c/code\u003e\u003c/a\u003e fix(forms): Ensure the control instruction comes after the other bindings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8474277b49bf97652a716d162ffdb23403cd1d12\"\u003e\u003ccode\u003e8474277\u003c/code\u003e\u003c/a\u003e test(forms): improve test coverage for multiple pattern validators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5ad2e1bae0bc3089e8d98f53d061a3d21d3bc8f7\"\u003e\u003ccode\u003e5ad2e1b\u003c/code\u003e\u003c/a\u003e docs: replace old \u003ca href=\"https://angular.io/license\"\u003ehttps://angular.io/license\u003c/a\u003e with \u003ca href=\"https://angular.dev/license\"\u003ehttps://angular.dev/license\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/29f074a93f7738f78311140fad26c04eac2cf0d2\"\u003e\u003ccode\u003e29f074a\u003c/code\u003e\u003c/a\u003e fix(forms): Rename signal form [field] to [formField]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0c23d029448be2408a4d8af3a8c36da254836cd0\"\u003e\u003ccode\u003e0c23d02\u003c/code\u003e\u003c/a\u003e docs(forms): Clarify returning errors from submit functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/46dbd1856648f89473e9c6163ba63df33bb5b8a0\"\u003e\u003ccode\u003e46dbd18\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b2f417585acc0d1fb1251df842266721e06889ce\"\u003e\u003ccode\u003eb2f4175\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e7d99f02cba503aa7a30f71d388aef353205fff7\"\u003e\u003ccode\u003ee7d99f0\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003ccode\u003eec9dc94\u003c/code\u003e\u003c/a\u003e feat(platform-browser): add \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003ccode\u003eab67988\u003c/code\u003e\u003c/a\u003e feat(platform-browser): resolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://...\n\n_Description has been truncated_","html_url":"https://github.com/vt-cwalker/amplify-angular-template/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/vt-cwalker%2Famplify-angular-template/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"},{"uuid":"3814597390","node_id":"PR_kwDOQ57te869Otdy","number":1,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-01-15T15:55:19.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-14T19:39:25.000Z","updated_at":"2026-01-15T15:55:21.000Z","time_to_close":72954,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.10","new_version":"21.0.9"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1dea3e73665932e28bafcf2a321b8e6c1feef9b\"\u003e\u003ccode\u003ea1dea3e\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/696adbca5ffe513945b38c02b01be7a05ddfbe9f\"\u003e\u003ccode\u003e696adbc\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d699eef2ca32e07dfb1dec5ed2eac61c81664e68\"\u003e\u003ccode\u003ed699eef\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003ccode\u003e82d556a\u003c/code\u003e\u003c/a\u003e fix(forms): Ensure the control instruction comes after the other bindings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5cbb66fdf2ba5b53ced065241ee0e312ac0d6028\"\u003e\u003ccode\u003e5cbb66f\u003c/code\u003e\u003c/a\u003e test(forms): improve test coverage for multiple pattern validators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6a9d4d54587902ef14b76fb61788616e72b4d975\"\u003e\u003ccode\u003e6a9d4d5\u003c/code\u003e\u003c/a\u003e docs: replace old \u003ca href=\"https://angular.io/license\"\u003ehttps://angular.io/license\u003c/a\u003e with \u003ca href=\"https://angular.dev/license\"\u003ehttps://angular.dev/license\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003ccode\u003e0055f3c\u003c/code\u003e\u003c/a\u003e fix(forms): Rename signal form [field] to [formField]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/24fa4a246064864ebd96a3e2cf72dd77d797bd10\"\u003e\u003ccode\u003e24fa4a2\u003c/code\u003e\u003c/a\u003e docs(forms): Clarify returning errors from submit functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff531752b0253a4b8d325a6c1bf257f4e0b60fcf\"\u003e\u003ccode\u003eff53175\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8aa77557f108bf66fc93fba01e072964dbe1fa92\"\u003e\u003ccode\u003e8aa7755\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003ccode\u003eae1dc16\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003ccode\u003ee3fba18\u003c/code\u003e\u003c/a\u003e feat(forms): add \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up s...\n\n_Description has been truncated_","html_url":"https://github.com/figonzal1/authn-tutorial/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/figonzal1%2Fauthn-tutorial/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"},{"uuid":"3792267928","node_id":"PR_kwDOJd2bus68Fro7","number":1627,"state":"open","title":"build(deps): bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /packages/angular-17","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":8,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-08T10:16:12.000Z","updated_at":"2026-01-20T12:00:35.367Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.7"}],"path":"/packages/angular-17","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d699eef2ca32e07dfb1dec5ed2eac61c81664e68\"\u003e\u003ccode\u003ed699eef\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff531752b0253a4b8d325a6c1bf257f4e0b60fcf\"\u003e\u003ccode\u003eff53175\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8aa77557f108bf66fc93fba01e072964dbe1fa92\"\u003e\u003ccode\u003e8aa7755\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003ccode\u003eae1dc16\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003ccode\u003ee3fba18\u003c/code\u003e\u003c/a\u003e feat(forms): add \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/af1d4acb9db38636f80207ca5f013bca26db5021\"\u003e\u003ccode\u003eaf1d4ac\u003c/code\u003e\u003c/a\u003e refactor(forms): bind native properties on interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e8b9d8cde420734c1134eb9fe22c44b2da27057\"\u003e\u003ccode\u003e0e8b9d8\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff37a13913353366feecfbb8bb161ee4f4c8e0b6\"\u003e\u003ccode\u003eff37a13\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4ba820d365aec7c12c193a950ebcbb63793c711\"\u003e\u003ccode\u003ea4ba820\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on native controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45bfd824bfba53aac406a72c1d3f1b8ab793a78f\"\u003e\u003ccode\u003e45bfd82\u003c/code\u003e\u003c/a\u003e docs(forms): add documentation links to Signal Forms API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e21076d0682c0ba641dd66723ac02f084e72dee9\"\u003e\u003ccode\u003ee21076d\u003c/code\u003e\u003c/a\u003e docs(forms): fix duplicate validator reference titles in AbstractControl\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/...\n\n_Description has been truncated_","html_url":"https://github.com/scania-digital-design-system/tegel/pull/1627","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/scania-digital-design-system%2Ftegel/issues/1627","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1627/packages"},{"uuid":"3778586290","node_id":"PR_kwDOOXF-tc67ZKBa","number":25,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-02-20T03:31:25.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-03T23:23:01.000Z","updated_at":"2026-02-20T03:31:27.000Z","time_to_close":4075704,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.6"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/the-virus-of-doom/space-lander/network/alerts).\n\n\u003c/details\u003e\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.","html_url":"https://github.com/the-virus-of-doom/space-lander/pull/25","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-virus-of-doom%2Fspace-lander/issues/25","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/25/packages"},{"uuid":"3761517356","node_id":"PR_kwDONbfSmc66igi5","number":5,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /repl/appengine/web","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-12-25T06:58:18.000Z","updated_at":"2025-12-25T07:01:17.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.6","new_version":"21.0.6"}],"path":"/repl/appengine/web","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/gomodules/cel-go/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/gomodules/cel-go/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomodules%2Fcel-go/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"3758735147","node_id":"PR_kwDOBv2NMs66ZmxC","number":327,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-02-11T21:52:56.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-23T22:40:03.000Z","updated_at":"2026-02-11T21:53:05.000Z","time_to_close":4317173,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.14","new_version":"21.0.6"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/TheJacksonLaboratory/hpo-web/network/alerts).\n\n\u003c/details\u003e\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","html_url":"https://github.com/TheJacksonLaboratory/hpo-web/pull/327","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJacksonLaboratory%2Fhpo-web/issues/327","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/327/packages"},{"uuid":"3724998755","node_id":"PR_kwDOIXei4M64pqHc","number":11,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-12T23:11:48.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-12T22:21:44.000Z","updated_at":"2025-12-12T23:11:56.000Z","time_to_close":3004,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.10","new_version":"21.0.5"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003ccode\u003e5880fbc\u003c/code\u003e\u003c/a\u003e feat(forms): redo the signal forms metadata API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003ccode\u003e55fc677\u003c/code\u003e\u003c/a\u003e fix(forms): add signals for dirty, hidden, and pending states in custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4c436a058add7507a6e49421a97e7c40d2de655\"\u003e\u003ccode\u003ea4c436a\u003c/code\u003e\u003c/a\u003e refactor: followup cleanup for \u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65758\"\u003e#65758\u003c/a\u003e fallout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7de8558219a50028c245df60528fc880d8db9662\"\u003e\u003ccode\u003e7de8558\u003c/code\u003e\u003c/a\u003e refactor(forms): Break logic.ts into separate files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003ccode\u003ebf1c12c\u003c/code\u003e\u003c/a\u003e fix(forms): memoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/ehabyanni/MoviesSite/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/ehabyanni/MoviesSite/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehabyanni%2FMoviesSite/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"},{"uuid":"3698440675","node_id":"PR_kwDOFkeL6s63RK1y","number":61,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-12-05T10:38:34.000Z","updated_at":"2025-12-05T10:38:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"16.2.7","new_version":"21.0.3"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003ccode\u003e6b4ab87\u003c/code\u003e\u003c/a\u003e feat(forms): Allows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003ccode\u003e609699a\u003c/code\u003e\u003c/a\u003e perf(core): tree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003ccode\u003ea5dbd4b\u003c/code\u003e\u003c/a\u003e fix(forms): support dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/017672f742935e660510f728cd9e67e3ad1ba90b\"\u003e\u003ccode\u003e017672f\u003c/code\u003e\u003c/a\u003e refactor(compiler): Generate the \u003ccode\u003econtrolCreate\u003c/code\u003e instruction after the native...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e0df4083d5294a841d751ac1d1f8b2e97ef7bba\"\u003e\u003ccode\u003e8e0df40\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Show examples on function overloads\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/ymchandra/2048-angular/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/ymchandra/2048-angular/pull/61","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymchandra%2F2048-angular/issues/61","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/61/packages"},{"uuid":"3687331102","node_id":"PR_kwDOJaXYtM62roEB","number":38,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-12-02T19:55:47.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T19:54:53.000Z","updated_at":"2025-12-02T19:55:55.000Z","time_to_close":54,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.8","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/choan312/choan_portfolio/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/choan312/choan_portfolio/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/choan312%2Fchoan_portfolio/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"},{"uuid":"3686702918","node_id":"PR_kwDOBctMdM62pfLb","number":68,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-29T16:03:34.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T16:49:36.000Z","updated_at":"2025-12-29T16:03:35.000Z","time_to_close":2330038,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/murraycu/angular-bigoquiz-client/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/murraycu/angular-bigoquiz-client/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/murraycu%2Fangular-bigoquiz-client/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"},{"uuid":"3685540962","node_id":"PR_kwDOEHoAWs62lh4b","number":28,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-02T12:16:36.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T12:11:22.000Z","updated_at":"2025-12-02T12:16:38.000Z","time_to_close":314,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"10.0.1","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/veerendervoskula/recipe-selection/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/veerendervoskula/recipe-selection/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendervoskula%2Frecipe-selection/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"},{"uuid":"3673877066","node_id":"PR_kwDOJaXYtM61-2BY","number":36,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-11-28T07:17:07.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-28T07:16:32.000Z","updated_at":"2025-11-28T07:17:15.000Z","time_to_close":35,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.8","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/choan312/choan_portfolio/pull/36","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/choan312%2Fchoan_portfolio/issues/36","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/36/packages"},{"uuid":"3673202052","node_id":"PR_kwDOJM6drs618oyc","number":6,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-02T22:39:42.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T23:21:53.000Z","updated_at":"2025-12-02T22:39:44.000Z","time_to_close":429469,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"14.3.0","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/ComputerBoer/Auctionviewer/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComputerBoer%2FAuctionviewer/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"3673024679","node_id":"PR_kwDOHf2mwM618C9V","number":61,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-02-10T00:09:18.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T21:17:32.000Z","updated_at":"2026-02-10T00:09:27.000Z","time_to_close":6403906,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.14","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://gith...\n\n_Description has been truncated_","html_url":"https://github.com/Laserfiche/lf-sample-OAuth-SPA-angular-cdn/pull/61","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Laserfiche%2Flf-sample-OAuth-SPA-angular-cdn/issues/61","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/61/packages"},{"uuid":"3672675794","node_id":"PR_kwDOP5Y0us6163D2","number":26,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /samples/AspireWithJavaScript/AspireJavaScript.Angular","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-11-27T18:32:07.000Z","updated_at":"2025-11-27T18:32:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.1.1","new_version":"21.0.1"}],"path":"/samples/AspireWithJavaScript/AspireJavaScript.Angular","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/blogtheristo/aspire-samples95/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blogtheristo%2Faspire-samples95/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"},{"uuid":"3672601145","node_id":"PR_kwDOConWm8616nFG","number":92,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /client","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-21T20:49:53.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T18:00:24.000Z","updated_at":"2026-01-21T20:49:55.000Z","time_to_close":4762169,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.1"}],"path":"/client","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://gith...\n\n_Description has been truncated_\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.","html_url":"https://github.com/emschu/oerc/pull/92","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emschu%2Foerc/issues/92","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/92/packages"},{"uuid":"3672533096","node_id":"PR_kwDOCmpbss616YFv","number":63,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-11-27T17:34:24.000Z","updated_at":"2025-12-24T04:00:13.485Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.0.4","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/EmmanuelTsouris/media-browser/pull/63","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmmanuelTsouris%2Fmedia-browser/issues/63","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/63/packages"}],"issue_packages":[{"old_version":null,"new_version":null,"update_type":null,"path":"/book-manager-frontend","pr_created_at":"2026-03-12T03:58:14.000Z","version_change":null,"issue":{"uuid":"4061953303","node_id":"PR_kwDORk0y687J5de2","number":4,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /book-manager-frontend","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-03-12T20:10:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-03-12T03:58:14.000Z","updated_at":"2026-03-12T20:10:58.000Z","time_to_close":58362,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.2.3"}],"path":"/book-manager-frontend","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/93c6dc6395d681dacd1dbbc46b95773038b6c32f\"\u003e\u003ccode\u003e93c6dc6\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(http): Improves base64 encoding/decoding with feature detect...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/76431ed3e3bd8bf90ac2fb481152a33587187037\"\u003e\u003ccode\u003e76431ed\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003ccode\u003e277ade9\u003c/code\u003e\u003c/a\u003e fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/aeb9b819d2cda782de85338dc9a5457c11e51bfe\"\u003e\u003ccode\u003eaeb9b81\u003c/code\u003e\u003c/a\u003e refactor(http): Improves base64 encoding/decoding with feature detection (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/67\"\u003e#67\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecf0bb466875d17e0823f2d793491c6f354d6c34\"\u003e\u003ccode\u003eecf0bb4\u003c/code\u003e\u003c/a\u003e test(http): refactors HTTP client tests to use TestBed and providers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003ccode\u003ee2e9a9a\u003c/code\u003e\u003c/a\u003e fix(core): adds transfer cache to httpResource to fix hydration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70e4c7fbabb45277cf76ee138c0be275beec7919\"\u003e\u003ccode\u003e70e4c7f\u003c/code\u003e\u003c/a\u003e refactor(common): log a warning when a KeyValuePipe receives a signal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2eeeabb7606900ad4fe8e3370d73f6add985f35d\"\u003e\u003ccode\u003e2eeeabb\u003c/code\u003e\u003c/a\u003e fix(common): fix LCP image detection with duplicate URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c4deaa52bb42130f90126f55786331aa8b4f7dc\"\u003e\u003ccode\u003e3c4deaa\u003c/code\u003e\u003c/a\u003e refactor(common): log a warning when a JsonPipe receives a signal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a8aab6480962f18ff0b28b5e46358ff8d43745c9\"\u003e\u003ccode\u003ea8aab64\u003c/code\u003e\u003c/a\u003e refactor(core): remove outdated TODO comments referencing TypeScript 2.1\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4a9b715b3abd3e51184937f764376883d6bb98a1\"\u003e\u003ccode\u003e4a9b715\u003c/code\u003e\u003c/a\u003e test(forms): cover transformedValue without FormField context\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003ccode\u003e670d166\u003c/code\u003e\u003c/a\u003e feat(forms): add 'blur' option to debounce rule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23cb9a4291dc7ee0db3a78416b5ca2b51cfad1ac\"\u003e\u003ccode\u003e23cb9a4\u003c/code\u003e\u003c/a\u003e refactor(forms): address feedback\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0a863ba03f5eb83f383f647b7015bc3640072a1d\"\u003e\u003ccode\u003e0a863ba\u003c/code\u003e\u003c/a\u003e refactor(forms): hide adapter in public options\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fe7b26e403febfe2662828945d41bc4567cbcc8b\"\u003e\u003ccode\u003efe7b26e\u003c/code\u003e\u003c/a\u003e docs(forms): transformedValue parse error wiring\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bdfb60f3e33065e047183dc1890c36e527e2b304\"\u003e\u003ccode\u003ebdfb60f\u003c/code\u003e\u003c/a\u003e fix(forms): use consistent error format returned from parse\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/631f60d1f9be72cb68330308a6ff18cc195babb8\"\u003e\u003ccode\u003e631f60d\u003c/code\u003e\u003c/a\u003e fix(forms): preserve parse errors when parse returns value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/567f292e8e0f9d2b5ddebadfa1c6d6dd6c456f39\"\u003e\u003ccode\u003e567f292\u003c/code\u003e\u003c/a\u003e fix(forms): support custom controls as host directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dcb9af6dfabb11591df0956ffcba753b2f5933f9\"\u003e\u003ccode\u003edcb9af6\u003c/code\u003e\u003c/a\u003e test(forms): \u003ccode\u003e[formField]\u003c/code\u003e synchronizes with a host directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fd956f675a36236ca1d94644acc41e8b55db4cba\"\u003e\u003ccode\u003efd956f6\u003c/code\u003e\u003c/a\u003e refactor(forms): simplify destroy subject handling\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/76431ed3e3bd8bf90ac2fb481152a33587187037\"\u003e\u003ccode\u003e76431ed\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003ccode\u003e277ade9\u003c/code\u003e\u003c/a\u003e fix(http): correctly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/11767cabe48606a1f575d50b8af79b8bbb35a852\"\u003e\u003ccode\u003e11767ca\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/85122cb12d30141aa3abb997c4b3ee31713ec07b\"\u003e\u003ccode\u003e85122cb\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f4469ad583a97c39843309270095c55f0a758692\"\u003e\u003ccode\u003ef4469ad\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.2.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.2.3\u003c/h2\u003e\n\u003cp\u003eThis release contains internal refactorings only.\u003c/p\u003e\n\u003ch2\u003e21.2.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e\u003cimg src=\"https://img.shields.io/badge/62a97f7e4b-fix-green\" alt=\"fix - 62a97f7e4b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e\u003cimg src=\"https://img.shields.io/badge/21b1c3b2ee-fix-green\" alt=\"fix - 21b1c3b2ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e\u003cimg src=\"https://img.shields.io/badge/224e60ecb1-fix-green\" alt=\"fix - 224e60ecb1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(extension): bundle TypeScript 5.9 internally (\u003ca href=\"https://github.com/angular/angular/commit/da57d1af732292823b1ea187b6e9cd9f6b4eca39\"\u003eda57d1af73\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e\u003cimg src=\"https://img.shields.io/badge/1df1697c6e-fix-green\" alt=\"fix - 1df1697c6e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/c822bf8e76-fix-green\" alt=\"fix - c822bf8e76\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e\u003cimg src=\"https://img.shields.io/badge/05d022d5e6-fix-green\" alt=\"fix - 05d022d5e6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/670d1660c4-feat-blue\" alt=\"feat - 670d1660c4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eperf(language-service): use lightweight project warmup for Angular analysis (\u003ca href=\"https://github.com/angular/angular/commit/d2137928e8f075527016a3c011dd8efc4d4e1ebd\"\u003ed2137928e8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.2.1\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77\"\u003e\u003cimg src=\"https://img.shields.io/badge/e2e9a9a531-fix-green\" alt=\"fix - e2e9a9a531\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadds transfer cache to httpResource to fix hydration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4ec3cc4e4-fix-green\" alt=\"fix - b4ec3cc4e4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent child animation elements from being orphaned\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e923d88398-fix-green\" alt=\"fix - e923d88398\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent removal of elements during drag and drop\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f\"\u003e\u003cimg src=\"https://img.shields.io/badge/277ade97ac-fix-green\" alt=\"fix - 277ade97ac\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly cache blob responses in transfer cache (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/67002\"\u003e#67002\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.2.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): Highlight function calls with optional chaining (\u003ca href=\"https://github.com/angular/angular/commit/4f8d3995f082929d1ef4163dcb4373d3ef7a67cf\"\u003e4f8d3995f0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add linked editing ranges for HTML tag synchronization (\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(vscode-extension): support highlighting for class bindings with brackets (\u003ca href=\"https://github.com/angular/angular/commit/01ed57f297d6713724dfaedc9520f80471f37c10\"\u003e01ed57f297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efeat(language-service): add JSON schema for angularCompilerOptions (\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(language-service): Detect local project version on creation (\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.2.3 (2026-03-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/62a97f7e4b896b4b03a1ef25764db387ffecebe1\"\u003e62a97f7e4b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure definitions compile\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21b1c3b2ee2c8423782b111b93bd60eb6b453259\"\u003e21b1c3b2ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003einclude signal debug names in their \u003ccode\u003etoString()\u003c/code\u003e representation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/224e60ecb1b90115baa702f1c06edc1d64d86187\"\u003e224e60ecb1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize translated attribute bindings with interpolations\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.2 (2026-03-09)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f\"\u003e1df1697c6e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3\"\u003ec822bf8e76\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ealways parenthesize object literals in TCB\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9\"\u003e05d022d5e6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3\"\u003e670d1660c4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e22.0.0-next.1 (2026-03-05)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/72a17afaf32194d42e4b5c090d4f75bad875930b\"\u003e72a17afaf3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent mutation of children array in RecursiveVisitor\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dc4cf649b62fd47e0e1bd255ec954d88585899c4\"\u003edc4cf649b6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore generated ngDevMode signal branch for code coverage\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c767d678cff65a89f380b4512590fa732db072c8\"\u003ec767d678cf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd 'blur' option to debounce rule\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f01901d7668ab926bd7a786f43dbb18f2bb8a5b7\"\u003ef01901d766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid generating invalid code in ChangeDetectionStrategy.Eager migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/84adb2fb3b3c0fa33f2dce44736d0ce130c44349\"\u003e\u003ccode\u003e84adb2f\u003c/code\u003e\u003c/a\u003e refactor(router): Permit deferring commit of traversal navigations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/17da2c392e9cbed2949153319ba3f5f777023af6\"\u003e\u003ccode\u003e17da2c3\u003c/code\u003e\u003c/a\u003e docs(docs-infra): remove \u003ccode\u003etoString\u003c/code\u003e from the API docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5b8a403220dd565ad8841849e4ac7891eda7b7c4\"\u003e\u003ccode\u003e5b8a403\u003c/code\u003e\u003c/a\u003e build: update rules_browsers digest to ceb5275\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81cabc14777a3b4966c29d60e1505aca8c29b71c\"\u003e\u003ccode\u003e81cabc1\u003c/code\u003e\u003c/a\u003e feat(core): add support for TypeScript 6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0f47fda51bd34bce73195e46aed874001d47bcaa\"\u003e\u003ccode\u003e0f47fda\u003c/code\u003e\u003c/a\u003e test(router): move timeout and autoTick helpers to shared testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/11767cabe48606a1f575d50b8af79b8bbb35a852\"\u003e\u003ccode\u003e11767ca\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3867cd85545bfb5bde9e92d46467651337b2b7ae\"\u003e\u003ccode\u003e3867cd8\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a0f2725197886715a44062f6a4c36f9c5894605\"\u003e\u003ccode\u003e5a0f272\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): adds browserUrl input support to router links\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/68ba9c45cb05ee2cc178b17b66f5440677511e8e\"\u003e\u003ccode\u003e68ba9c4\u003c/code\u003e\u003c/a\u003e test(router): remove provider zoneless from tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9505541d32e453b144392b7c7db557d2a14c9794\"\u003e\u003ccode\u003e9505541\u003c/code\u003e\u003c/a\u003e feat(router): adds browserUrl input support to router links\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.2.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/Kushanyasiru97/book-manager-website/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/Kushanyasiru97/book-manager-website/pull/4","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kushanyasiru97%2Fbook-manager-website/issues/4","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/4/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":"/deck","pr_created_at":"2026-02-15T13:04:38.000Z","version_change":null,"issue":{"uuid":"3944054847","node_id":"PR_kwDORMRbzM7D6YhI","number":5,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /deck","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-02-15T13:04:38.000Z","updated_at":"2026-02-15T13:04:47.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.1.4"}],"path":"/deck","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/19542a30b132ffc56aa55ec85406a43cd56bf639\"\u003e\u003ccode\u003e19542a3\u003c/code\u003e\u003c/a\u003e test(common): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003ccode\u003e3905015\u003c/code\u003e\u003c/a\u003e fix(http): correctly parse ArrayBuffer and Blob in transfer cache\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f5c233f1d760d91ac3cf9dd12526730bb79dead\"\u003e\u003ccode\u003e6f5c233\u003c/code\u003e\u003c/a\u003e refactor(common): extract argument assertion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7242da24fbd709a5ff08160790b767387758a644\"\u003e\u003ccode\u003e7242da2\u003c/code\u003e\u003c/a\u003e docs: reword docs on standalone.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6601f06e44189ec06d2651f4c326e8ba058273ce\"\u003e\u003ccode\u003e6601f06\u003c/code\u003e\u003c/a\u003e test(common): enables zoneless change detection in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2c3f3cc3360672010d8bcc3db5f5370146e322d1\"\u003e\u003ccode\u003e2c3f3cc\u003c/code\u003e\u003c/a\u003e refactor(forms): use optional chaining for safer method calls in form directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003ccode\u003e0d1acd0\u003c/code\u003e\u003c/a\u003e feat(forms): support signal-based schemas in validateStandardSchema\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1bf6bfc07f692b31647fb286f850b10ef4bd64b7\"\u003e\u003ccode\u003e1bf6bfc\u003c/code\u003e\u003c/a\u003e test(forms): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/04d518bc26ab96ab67108e42da5ba6e42d987c1c\"\u003e\u003ccode\u003e04d518b\u003c/code\u003e\u003c/a\u003e refactor(forms): work around internal issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bbd5cf82b16655866838cafbdf7945a2975bcfd5\"\u003e\u003ccode\u003ebbd5cf8\u003c/code\u003e\u003c/a\u003e test(forms): migrate reactive forms and value accessors to zoneless\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003ccode\u003e6f75b6e\u003c/code\u003e\u003c/a\u003e fix(forms): Resolves debounce promise on abort in debounceForDuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003ccode\u003e9f99b14\u003c/code\u003e\u003c/a\u003e fix(forms): only touch visible, interactive fields on submit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/31e6f0d7dcb4e644d765f85bf6f12d6c2fb829ad\"\u003e\u003ccode\u003e31e6f0d\u003c/code\u003e\u003c/a\u003e test(forms): submit behavior while validation is pending\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/223ff748915e591ca00792a4720ef93ca23261db\"\u003e\u003ccode\u003e223ff74\u003c/code\u003e\u003c/a\u003e build: don't substitute binary files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e6ea328cf4d737acb4c9e02783b943b90c28bdd1\"\u003e\u003ccode\u003ee6ea328\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.1.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003e\u003cimg src=\"https://img.shields.io/badge/caab23dfe6-fix-green\" alt=\"fix - caab23dfe6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b99eaa019-fix-green\" alt=\"fix - 2b99eaa019\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6aeac504c-fix-green\" alt=\"fix - d6aeac504c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e\u003cimg src=\"https://img.shields.io/badge/0d1acd0165-feat-blue\" alt=\"feat - 0d1acd0165\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3905015ccc-fix-green\" alt=\"fix - 3905015ccc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.4 (2026-02-11)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/caab23dfe6acf06c3b859af091f5e078b08f1c4c\"\u003ecaab23dfe6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd geolocation element to schema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b99eaa019b5551a2e2fcf9ff8cd0a796e1e857b\"\u003e2b99eaa019\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecapture animation dependencies eagerly to avoid destroyed injector\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6aeac504c6181f15e5d8afdca3d9c3e3b32652c\"\u003ed6aeac504c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix flakey test due to document injection\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0d1acd0165511b57ce853f29486d9b92d0215959\"\u003e0d1acd0165\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport signal-based schemas in validateStandardSchema\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3905015ccc53399a606dd8e4f3c4d0cce628a08e\"\u003e3905015ccc\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ecorrectly parse ArrayBuffer and Blob in transfer cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.2 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d5210c9fedd8abdd810d7a89ec7ee9a1234f5c1\"\u003e8d5210c9fe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd ChangeDetectionStrategy.Eager alias for Default\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff9e36a988ad7f11bc7a1ca903f75140d14c02c\"\u003eaff9e36a98\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab433abdd4c8984b6f9a16219b10af0c54b31f7\"\u003e8ab433abdd\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cab5ddd526f5a6ba44b042ba0391f0526877cde6\"\u003ecab5ddd526\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c66a19f0de1a4f8d0f50079b26f8bb52852be6e1\"\u003ec66a19f0de\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/95ecce8334299defe55fb2b74264e5258ffd137c\"\u003e95ecce8334\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow setting submit options at form-level\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3937afc3167ce409eebb06d91d5fb122eea4e33d\"\u003e3937afc316\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce SignalFormControl for Reactive Forms compatibility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd208ca2595258fcd1e289374f812ce0b56c7011\"\u003edd208ca259\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eupdate submit function to accept options object\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1bf535f8e5cbeaec23e9dbb98c1a1bb99deb62a\"\u003eb1bf535f8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/496967e7b13dfe1ebdde69724cd62880914beb60\"\u003e496967e7b1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd JSON schema for angularCompilerOptions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c21866f49ff74344551395ae0a5df1841d54c0d\"\u003e8c21866f49\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd linked editing ranges for HTML tag synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c3b1cf18d14eb795f949ed05c4a6741dc582485\"\u003e1c3b1cf18d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6c14e3af2e6cb0566bd1e2391f8ee75e8b942b43\"\u003e\u003ccode\u003e6c14e3a\u003c/code\u003e\u003c/a\u003e build: update Jasmine to 6.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003ccode\u003e49a36f4\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003ccode\u003ed6268c0\u003c/code\u003e\u003c/a\u003e fix(router): limit UrlParser recursion depth to prevent stack overflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003ccode\u003e21ecdc0\u003c/code\u003e\u003c/a\u003e fix(router): Do not intercept reload events with Navigation integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/18842266deb175d911c305e1fbf318b095666a00\"\u003e\u003ccode\u003e1884226\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Handle additional description format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1c68e66a7af6a4e3b9d456da6ec681928d05465\"\u003e\u003ccode\u003eb1c68e6\u003c/code\u003e\u003c/a\u003e docs: update examples to use \u003ccode\u003eisActive\u003c/code\u003e instead of deprecated `Router.isActiv...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003ccode\u003e7003e8d\u003c/code\u003e\u003c/a\u003e feat(router): Publish Router's integration with platform Navigation API as ex...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9e043decaf01dc622236814a2a2db73ec2bffe28\"\u003e\u003ccode\u003e9e043de\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.4/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/mohan-the-octocat/calm-outfit-concierge/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/mohan-the-octocat/calm-outfit-concierge/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/mohan-the-octocat%2Fcalm-outfit-concierge/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2026-02-09T22:23:17.000Z","version_change":null,"issue":{"uuid":"3918438376","node_id":"PR_kwDOOx5JNs7Clu2i","number":68,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-02-09T22:28:22.000Z","author_association":null,"state_reason":null,"created_at":"2026-02-09T22:23:17.000Z","updated_at":"2026-02-09T22:28:31.000Z","time_to_close":305,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.13","new_version":"21.1.3"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7242da24fbd709a5ff08160790b767387758a644\"\u003e\u003ccode\u003e7242da2\u003c/code\u003e\u003c/a\u003e docs: reword docs on standalone.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6601f06e44189ec06d2651f4c326e8ba058273ce\"\u003e\u003ccode\u003e6601f06\u003c/code\u003e\u003c/a\u003e test(common): enables zoneless change detection in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3dfdb71d65ed15e7d3e69ffe3b89b7b4cef9504a\"\u003e\u003ccode\u003e3dfdb71\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd58c4b667b74e978f5e5eae56af1204f84e2688\"\u003e\u003ccode\u003edd58c4b\u003c/code\u003e\u003c/a\u003e refactor(common): Add token to indicate whether precommit handler is supported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003ccode\u003ea6b8cb6\u003c/code\u003e\u003c/a\u003e feat(common): support custom transformations in ImageKit and Imgix loaders\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1bf6bfc07f692b31647fb286f850b10ef4bd64b7\"\u003e\u003ccode\u003e1bf6bfc\u003c/code\u003e\u003c/a\u003e test(forms): remove zone-based testing utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/04d518bc26ab96ab67108e42da5ba6e42d987c1c\"\u003e\u003ccode\u003e04d518b\u003c/code\u003e\u003c/a\u003e refactor(forms): work around internal issue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bbd5cf82b16655866838cafbdf7945a2975bcfd5\"\u003e\u003ccode\u003ebbd5cf8\u003c/code\u003e\u003c/a\u003e test(forms): migrate reactive forms and value accessors to zoneless\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003ccode\u003e6f75b6e\u003c/code\u003e\u003c/a\u003e fix(forms): Resolves debounce promise on abort in debounceForDuration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003ccode\u003e9f99b14\u003c/code\u003e\u003c/a\u003e fix(forms): only touch visible, interactive fields on submit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/31e6f0d7dcb4e644d765f85bf6f12d6c2fb829ad\"\u003e\u003ccode\u003e31e6f0d\u003c/code\u003e\u003c/a\u003e test(forms): submit behavior while validation is pending\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/223ff748915e591ca00792a4720ef93ca23261db\"\u003e\u003ccode\u003e223ff74\u003c/code\u003e\u003c/a\u003e build: don't substitute binary files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26c2fe6db26cbe696e95ef7877118effef3b1bba\"\u003e\u003ccode\u003e26c2fe6\u003c/code\u003e\u003c/a\u003e refactor(forms): remove unused API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/58720dbc56ab986424ff88dc52db4fb739b438ac\"\u003e\u003ccode\u003e58720db\u003c/code\u003e\u003c/a\u003e refactor(forms): update Reactive Forms guide URL\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003ccode\u003ecb75f9c\u003c/code\u003e\u003c/a\u003e fix(forms): fix control value syncing on touch\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e6ea328cf4d737acb4c9e02783b943b90c28bdd1\"\u003e\u003ccode\u003ee6ea328\u003c/code\u003e\u003c/a\u003e docs: update \u003ccode\u003ebootstrapApplication\u003c/code\u003e docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003ccode\u003eec9dc94\u003c/code\u003e\u003c/a\u003e feat(platform-browser): add \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.13 to 21.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.1.3\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e\u003cimg src=\"https://img.shields.io/badge/2b254bc050-fix-green\" alt=\"fix - 2b254bc050\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003e\u003cimg src=\"https://img.shields.io/badge/e5110b4fa1-fix-green\" alt=\"fix - e5110b4fa1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e\u003cimg src=\"https://img.shields.io/badge/2cf4da0ea1-fix-green\" alt=\"fix - 2cf4da0ea1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e\u003cimg src=\"https://img.shields.io/badge/70a5b651be-fix-green\" alt=\"fix - 70a5b651be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e\u003cimg src=\"https://img.shields.io/badge/6f75b6e3f6-fix-green\" alt=\"fix - 6f75b6e3f6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c7126d23b-fix-green\" alt=\"fix - 4c7126d23b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003cimg src=\"https://img.shields.io/badge/d6268c0bbb-fix-green\" alt=\"fix - d6268c0bbb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003cimg src=\"https://img.shields.io/badge/49a36f4cc7-perf-orange\" alt=\"perf - 49a36f4cc7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.2\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9f99b14882bc4f883aa33295856010a8bca900fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/9f99b14882-fix-green\" alt=\"fix - 9f99b14882\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c57b0355b51f5aee5abd822f203fc3bcc3e85acd\"\u003e\u003cimg src=\"https://img.shields.io/badge/c57b0355b5-fix-green\" alt=\"fix - c57b0355b5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003cimg src=\"https://img.shields.io/badge/21ecdc036a-fix-green\" alt=\"fix - 21ecdc036a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.1.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e1f1ed5732f3bb4d5dfbd1f0ee5a5be840594e4\"\u003e\u003cimg src=\"https://img.shields.io/badge/0e1f1ed573-fix-green\" alt=\"fix - 0e1f1ed573\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edrop .tsx extension for generated relative imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05adfcf8f26013ac20c38f2b08847b5142e4fd85\"\u003e\u003cimg src=\"https://img.shields.io/badge/05adfcf8f2-fix-green\" alt=\"fix - 05adfcf8f2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle Set in class bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89a80a970d9590df0509d8b94090904a99b7aca\"\u003e\u003cimg src=\"https://img.shields.io/badge/d89a80a970-feat-blue\" alt=\"feat - d89a80a970\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAbility to manually register a form field binding in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cb75f9ce85160b2e4359610c06294929ac1169c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/cb75f9ce85-fix-green\" alt=\"fix - cb75f9ce85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix control value syncing on touch\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.3 (2026-02-04)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2b254bc0508b73aab8991c3b1a9a703c339cb735\"\u003e2b254bc050\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elinkedSignal.update\u003c/code\u003e should propagate errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5110b4fa155e4669ed507f3460d2d29026a28ab\"\u003ee5110b4fa1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexport DirectiveWithBindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/2cf4da0ea11f5746eb7ae4dfd775f757576e4d98\"\u003e2cf4da0ea1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehold constructors weakly in DepsTracker cache\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70a5b651be29f1421eb25150b560bfe154aad6bc\"\u003e70a5b651be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent element duplication with dynamic components\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6f75b6e3f60dc2a4f33e13562649931dc95eb52b\"\u003e6f75b6e3f6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eResolves debounce promise on abort in debounceForDuration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elocalize\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c7126d23be3e43b1d5bd6f2fb13119d185c3682\"\u003e4c7126d23b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd support for unit-test builder in ng-add schematic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003ed6268c0bbb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003elimit UrlParser recursion depth to prevent stack overflow\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e49a36f4cc7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eUse .bind to avoid holding other closures in memory\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.2.0-next.1 (2026-01-28)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bbe6dc46c9dc13bafa81a60c7613b84b5ca3761\"\u003e8bbe6dc46c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd Location strategies to manage trailing slash on write\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebae211add37700858adeb8fc5d87bf503a59721\"\u003eebae211add\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eintroduce parse errors in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682e53113601b967881cf3d19ba8cffff637c0f\"\u003ee682e53113\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eonly touch visible, interactive fields on submit\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fb05fc86d0f12ffafd94c7c1420118d8a79f7e59\"\u003efb05fc86d0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esort error summary by DOM order\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-server\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6fb39d9b62cbb634e95ec00fe5ef85d84da3bdbd\"\u003e6fb39d9b62\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport client-side file watching via \u003ccode\u003eonDidChangeWatchedFiles\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a7cbd46685874f4500c52629d09c5f7fd309080\"\u003e8a7cbd4668\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDetect local project version on creation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b51bab583d84e38f16dea489e4119edc34e2a491\"\u003eb51bab583d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd partial ActivatedRouteSnapshot information to \u003ccode\u003ecanMatch\u003c/code\u003e params\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/dbd50be7f7151c567b3caa72c3f21083e7022b74\"\u003edbd50be7f7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eDo not intercept reload events with Navigation integration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/49a36f4cc7254420bc34fff4e0f0242e00970280\"\u003e\u003ccode\u003e49a36f4\u003c/code\u003e\u003c/a\u003e perf(router): Use .bind to avoid holding other closures in memory\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d6268c0bbbdc92abaaaeb8eebee3bc45decab9c9\"\u003e\u003ccode\u003ed6268c0\u003c/code\u003e\u003c/a\u003e fix(router): limit UrlParser recursion depth to prevent stack overflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ecdc036a46c487d6c5b6bd25c2bbc3e53a60f9\"\u003e\u003ccode\u003e21ecdc0\u003c/code\u003e\u003c/a\u003e fix(router): Do not intercept reload events with Navigation integration\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/18842266deb175d911c305e1fbf318b095666a00\"\u003e\u003ccode\u003e1884226\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Handle additional description format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b1c68e66a7af6a4e3b9d456da6ec681928d05465\"\u003e\u003ccode\u003eb1c68e6\u003c/code\u003e\u003c/a\u003e docs: update examples to use \u003ccode\u003eisActive\u003c/code\u003e instead of deprecated `Router.isActiv...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003ccode\u003e7003e8d\u003c/code\u003e\u003c/a\u003e feat(router): Publish Router's integration with platform Navigation API as ex...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9e043decaf01dc622236814a2a2db73ec2bffe28\"\u003e\u003ccode\u003e9e043de\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bcef77d9507e9778c35a6186ef4a8c1d67cd5992\"\u003e\u003ccode\u003ebcef77d\u003c/code\u003e\u003c/a\u003e fix(router): Fix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/CLRamey/Cinephoria/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/CLRamey/Cinephoria/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/CLRamey%2FCinephoria/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2026-01-19T20:42:16.000Z","version_change":null,"issue":{"uuid":"3831152399","node_id":"PR_kwDOQ9EwHM6-FUO2","number":7,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-01-19T23:58:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-19T20:42:16.000Z","updated_at":"2026-01-19T23:58:22.000Z","time_to_close":11764,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.1.0"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3954dc278b7a61ea2b82021041b030d8fc068c74\"\u003e\u003ccode\u003e3954dc2\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/74af7d85e5c6fbda8e2c7a2a61c26fcae437d14c\"\u003e\u003ccode\u003e74af7d8\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a2b94299922b3cb09c63cb8eb517bcf3b94be8bb\"\u003e\u003ccode\u003ea2b9429\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;feat(router): add trailingSlash config option\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/12fccc5e99c9f6b1babf77fde52d84001e68f11a\"\u003e\u003ccode\u003e12fccc5\u003c/code\u003e\u003c/a\u003e feat(router): add trailingSlash config option\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3dfdb71d65ed15e7d3e69ffe3b89b7b4cef9504a\"\u003e\u003ccode\u003e3dfdb71\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/dd58c4b667b74e978f5e5eae56af1204f84e2688\"\u003e\u003ccode\u003edd58c4b\u003c/code\u003e\u003c/a\u003e refactor(common): Add token to indicate whether precommit handler is supported\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003ccode\u003ea6b8cb6\u003c/code\u003e\u003c/a\u003e feat(common): support custom transformations in ImageKit and Imgix loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003ccode\u003ed879097\u003c/code\u003e\u003c/a\u003e feat(common): Add custom transformations for Cloudflare and Cloudinary image ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003ccode\u003e1ea5c97\u003c/code\u003e\u003c/a\u003e feat(forms): allow focusing bound control from field state\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/532633301b4677aa22a4b2cff3fcaa558a648b21\"\u003e\u003ccode\u003e5326333\u003c/code\u003e\u003c/a\u003e fix(forms): Ensure the control instruction comes after the other bindings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8474277b49bf97652a716d162ffdb23403cd1d12\"\u003e\u003ccode\u003e8474277\u003c/code\u003e\u003c/a\u003e test(forms): improve test coverage for multiple pattern validators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5ad2e1bae0bc3089e8d98f53d061a3d21d3bc8f7\"\u003e\u003ccode\u003e5ad2e1b\u003c/code\u003e\u003c/a\u003e docs: replace old \u003ca href=\"https://angular.io/license\"\u003ehttps://angular.io/license\u003c/a\u003e with \u003ca href=\"https://angular.dev/license\"\u003ehttps://angular.dev/license\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/29f074a93f7738f78311140fad26c04eac2cf0d2\"\u003e\u003ccode\u003e29f074a\u003c/code\u003e\u003c/a\u003e fix(forms): Rename signal form [field] to [formField]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0c23d029448be2408a4d8af3a8c36da254836cd0\"\u003e\u003ccode\u003e0c23d02\u003c/code\u003e\u003c/a\u003e docs(forms): Clarify returning errors from submit functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/46dbd1856648f89473e9c6163ba63df33bb5b8a0\"\u003e\u003ccode\u003e46dbd18\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b2f417585acc0d1fb1251df842266721e06889ce\"\u003e\u003ccode\u003eb2f4175\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e7d99f02cba503aa7a30f71d388aef353205fff7\"\u003e\u003ccode\u003ee7d99f0\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/03e2b3682693e47f7bf84fa12df45659ebb09599\"\u003e\u003ccode\u003e03e2b36\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003ccode\u003e99ad18a\u003c/code\u003e\u003c/a\u003e feat(core): Add stability debugging utility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6270bba056cfaadb3fe0b2bf3b17036bdc28b90e\"\u003e\u003ccode\u003e6270bba\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2ccdf50fba9536d931988098f6d4f5ebb52588f9\"\u003e\u003ccode\u003e2ccdf50\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003ccode\u003eb4f584c\u003c/code\u003e\u003c/a\u003e fix(core): return \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/96b79fc393855777c69e817a5bddbc295af4806b\"\u003e\u003ccode\u003e96b79fc\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c137f1fe91aeb8eb993eb7ba78d813c77449dd13\"\u003e\u003ccode\u003ec137f1f\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/21ca49cf62eb1a68b4471f224b11dc2532f0a8bb\"\u003e\u003ccode\u003e21ca49c\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003ccode\u003eec9dc94\u003c/code\u003e\u003c/a\u003e feat(platform-browser): add \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003ccode\u003eab67988\u003c/code\u003e\u003c/a\u003e feat(platform-browser): resolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://img.shields.io/badge/b4f584cf42-fix-green\" alt=\"fix - b4f584cf42\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e\u003cimg src=\"https://img.shields.io/badge/1ea5c97703-feat-blue\" alt=\"feat - 1ea5c97703\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec9dc94cee-feat-blue\" alt=\"feat - ec9dc94cee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003e\u003cimg src=\"https://img.shields.io/badge/ab67988d2e-feat-blue\" alt=\"feat - ab67988d2e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e\u003cimg src=\"https://img.shields.io/badge/5edceffd04-feat-blue\" alt=\"feat - 5edceffd04\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003e\u003cimg src=\"https://img.shields.io/badge/a03c82564d-feat-blue\" alt=\"feat - a03c82564d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003e\u003cimg src=\"https://img.shields.io/badge/e44839b016-feat-blue\" alt=\"feat - e44839b016\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003e\u003cimg src=\"https://img.shields.io/badge/c25d749d85-feat-blue\" alt=\"feat - c25d749d85\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e\u003cimg src=\"https://img.shields.io/badge/1c00ab42f8-feat-blue\" alt=\"feat - 1c00ab42f8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e\u003cimg src=\"https://img.shields.io/badge/7003e8d241-feat-blue\" alt=\"feat - 7003e8d241\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003e\u003cimg src=\"https://img.shields.io/badge/c84d372778-feat-blue\" alt=\"feat - c84d372778\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e\u003cimg src=\"https://img.shields.io/badge/75fe8f8af9-refactor-yellow\" alt=\"refactor - 75fe8f8af9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.1.0 (2026-01-14)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e06be8034bb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003eb4f584cf42\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ereturn \u003ccode\u003eStaticProvider\u003c/code\u003e for \u003ccode\u003eprovidePlatformInitializer\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1ea5c97703ad3c6d8e4cb1b4297eec57629ce117\"\u003e1ea5c97703\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eallow focusing bound control from field state\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eplatform-browser\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec9dc94ceeb3c026c64e01c6889b7f5c6fd25a66\"\u003eec9dc94cee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003econtext\u003c/code\u003e to \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab67988d2e5242eff0034483f984428d684acd02\"\u003eab67988d2e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eresolve JIT resources in \u003ccode\u003ecreateApplication\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5edceffd0431f5a25e111a731db521e966b91f86\"\u003e5edceffd04\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd controls for route cleanup\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a03c82564da6824e199ff48d5249ea8708040951\"\u003ea03c82564d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd scroll behavior controls on router navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e44839b01640505e554fff16f24e08f282a557c0\"\u003ee44839b016\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd standalone function to create a comptued for isActive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c25d749d85374fff7745980cd9bb2673c661105a\"\u003ec25d749d85\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eExecute RunGuardsAndResolvers function in injection context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1c00ab42f8714f2775ed75bbf3cdf0fd44ee32c3\"\u003e1c00ab42f8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eextend paramters of RedirectFunction to include paramMap and queryParamMap\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7003e8d2417660f71b3a2a017aff3e650c8d9646\"\u003e7003e8d241\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003ePublish Router's integration with platform Navigation API as experimental\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c84d37277874cf7cbd7582a295d796ff113b9cc1\"\u003ec84d372778\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eSupport wildcard params with segments trailing (\u003ca href=\"https://redirect.github.com/angular/angular/pull/64737\"\u003e#64737\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/75fe8f8af9488bae6f7068b64d44500643c5d63f\"\u003e75fe8f8af9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003edeprecate \u003ccode\u003eVERSION\u003c/code\u003e export\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d3f67f6ca83ce36291d444e664068e881b4caf66\"\u003e\u003ccode\u003ed3f67f6\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/26fed34e0e340166b70702d6177ad639bbfa94aa\"\u003e\u003ccode\u003e26fed34\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.1.0/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVSCode Extension: 21.1.0\u003c/h2\u003e\n\u003ch2\u003e21.1.0 (2026-01-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(vscode-extension): convert enum member kind in completions correctly (\u003ca href=\"https://github.com/angular/angular/commit/50674f8c28c970e6a9cfe222f9f55bace4e16321\"\u003e50674f8c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.1.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003e\u003cimg src=\"https://img.shields.io/badge/d8790972be-feat-blue\" alt=\"feat - d8790972be\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6b8cb68af-feat-blue\" alt=\"feat - a6b8cb68af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e\u003cimg src=\"https://img.shields.io/badge/640693da8e-feat-blue\" alt=\"feat - 640693da8e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ad3adc7c6-fix-green\" alt=\"fix - 0ad3adc7c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e\u003cimg src=\"https://img.shields.io/badge/99ad18a4ee-feat-blue\" alt=\"feat - 99ad18a4ee\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003e\u003cimg src=\"https://img.shields.io/badge/a0dfa5fa86-feat-blue\" alt=\"feat - a0dfa5fa86\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e\u003cimg src=\"https://img.shields.io/badge/6e18fa8bc9-feat-blue\" alt=\"feat - 6e18fa8bc9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003e\u003cimg src=\"https://img.shields.io/badge/e407280ab5-feat-blue\" alt=\"feat - e407280ab5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/06be8034bb9b9adfc07ab0d40cd87c6ae5de02de\"\u003e\u003cimg src=\"https://img.shields.io/badge/06be8034bb-fix-green\" alt=\"fix - 06be8034bb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eMicrotask scheduling should be used after any application synchronization\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b4f584cf42235c94bb8389fa55bc634e23d7b010\"\u003e\u003cimg src=\"https://...\n\n_Description has been truncated_","html_url":"https://github.com/vt-cwalker/amplify-angular-template/pull/7","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/vt-cwalker%2Famplify-angular-template/issues/7","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/7/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2026-01-14T19:39:25.000Z","version_change":null,"issue":{"uuid":"3814597390","node_id":"PR_kwDOQ57te869Otdy","number":1,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-01-15T15:55:19.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-14T19:39:25.000Z","updated_at":"2026-01-15T15:55:21.000Z","time_to_close":72954,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.10","new_version":"21.0.9"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1dea3e73665932e28bafcf2a321b8e6c1feef9b\"\u003e\u003ccode\u003ea1dea3e\u003c/code\u003e\u003c/a\u003e refactor(http): remove redundant providedIn: 'root' in XSRF_HEADER_NAME\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/696adbca5ffe513945b38c02b01be7a05ddfbe9f\"\u003e\u003ccode\u003e696adbc\u003c/code\u003e\u003c/a\u003e refactor(core): Use the provided Document value rather than global in FakeNav...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d699eef2ca32e07dfb1dec5ed2eac61c81664e68\"\u003e\u003ccode\u003ed699eef\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003ccode\u003e82d556a\u003c/code\u003e\u003c/a\u003e fix(forms): Ensure the control instruction comes after the other bindings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5cbb66fdf2ba5b53ced065241ee0e312ac0d6028\"\u003e\u003ccode\u003e5cbb66f\u003c/code\u003e\u003c/a\u003e test(forms): improve test coverage for multiple pattern validators\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6a9d4d54587902ef14b76fb61788616e72b4d975\"\u003e\u003ccode\u003e6a9d4d5\u003c/code\u003e\u003c/a\u003e docs: replace old \u003ca href=\"https://angular.io/license\"\u003ehttps://angular.io/license\u003c/a\u003e with \u003ca href=\"https://angular.dev/license\"\u003ehttps://angular.dev/license\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003ccode\u003e0055f3c\u003c/code\u003e\u003c/a\u003e fix(forms): Rename signal form [field] to [formField]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/24fa4a246064864ebd96a3e2cf72dd77d797bd10\"\u003e\u003ccode\u003e24fa4a2\u003c/code\u003e\u003c/a\u003e docs(forms): Clarify returning errors from submit functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff531752b0253a4b8d325a6c1bf257f4e0b60fcf\"\u003e\u003ccode\u003eff53175\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8aa77557f108bf66fc93fba01e072964dbe1fa92\"\u003e\u003ccode\u003e8aa7755\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003ccode\u003eae1dc16\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003ccode\u003ee3fba18\u003c/code\u003e\u003c/a\u003e feat(forms): add \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/450b4c1e9043f305088a6f3dfa0db4421b373b7d\"\u003e\u003ccode\u003e450b4c1\u003c/code\u003e\u003c/a\u003e refactor(core): update error message links to versioned docs (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/66374\"\u003e#66374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003cp\u003e| Commit | Description |\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.9 (2026-01-14)\u003c/h1\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e82d556a8fb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e0055f3cc79\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003ee4bfa5c9e7\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-rc.0 (2026-01-08)\u003c/h1\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d8790972bea4c59a208219dd36d158b5d7e4fdde\"\u003ed8790972be\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd custom transformations for Cloudflare and Cloudinary image loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6b8cb68afaded6999ee68f495512be1a9932ae4\"\u003ea6b8cb68af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport custom transformations in ImageKit and Imgix loaders\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/640693da8e667c015662246152236585d9b24e7f\"\u003e640693da8e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd support for multiple swich cases matching\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/10da2f9029720e7a647d57921548b39cf11f55dd\"\u003e10da2f9029\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a56c1367f336a7da0ed8dd00c299c8be8da848c\"\u003e3a56c1367f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/76fa180005a30b431c133285b68e8398df2e0e52\"\u003e76fa180005\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa7cb4b87af39f64a77ba930d891ac371a6858e9\"\u003efa7cb4b87a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ad3adc7c6d4094f1e3432a3f2e3bdc9862cb4fa\"\u003e0ad3adc7c6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport empty cases\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/106ba63650340cc828e302dc4eb46dbd4fb43a3b\"\u003e106ba63650\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3a26244d61c9233e237817dc861be12dfc4bc918\"\u003e3a26244d61\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f12e160bc1010daf582d5f0ab863a16e4b94ca4c\"\u003ef12e160bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/99ad18a4ee82ecc5524106d1d403ccfa9bae2304\"\u003e99ad18a4ee\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAdd stability debugging utility\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a0dfa5fa86f40520b0e368a021b3c72009a45e8e\"\u003ea0dfa5fa86\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport rest arguments in function calls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6e18fa8bc9d7e6801e2e89e635c2f759dc422317\"\u003e6e18fa8bc9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread elements in array literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e407280ab53cde5f93c3a643457c848845c6ec8b\"\u003ee407280ab5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003esupport spread expressions in object literals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/80b0fbba1f9e3a8ce9a89aa88ae3efd4a1f60271\"\u003e80b0fbba1f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e2a9938c517b1e0429818e285ef70b69bf61181b\"\u003ee2a9938c51\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/30e9c62bdfb8af73c24833473bd4492869538d2d\"\u003e30e9c62bdf\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/86dc1283e8cad0eac1a31bc2c6cff137e6cb2542\"\u003e86dc1283e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/91dc91bae4a1bbefc58bef6ef739d0e02ab44d56\"\u003e91dc91bae4\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.9/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.10 to 21.0.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.9\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/82d556a8fb38cd2024e3d098c55254305ba12b6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/82d556a8fb-fix-green\" alt=\"fix - 82d556a8fb\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eEnsure the control instruction comes after the other bindings\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0055f3cc79f387b8dec6ce5e1a33fad5486f9341\"\u003e\u003cimg src=\"https://img.shields.io/badge/0055f3cc79-fix-green\" alt=\"fix - 0055f3cc79\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eRename signal form [field] to [formField]\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e4bfa5c9e7feec48d3c4e9425a21a2ccf6532bdb\"\u003e\u003cimg src=\"https://img.shields.io/badge/e4bfa5c9e7-fix-green\" alt=\"fix - e4bfa5c9e7\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent duplicate imports in common-to-standalone migration\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.8\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a6a2621bf9df02584e4079f4a804278fc2060a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/a6a2621bf9-fix-green\" alt=\"fix - a6a2621bf9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix memory leak with event replay\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5239e471a1f887574c6703c0497e5854304cce4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5239e471a1-fix-green\" alt=\"fix - 5239e471a1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle cancelled traversals in fake navigation\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up s...\n\n_Description has been truncated_","html_url":"https://github.com/figonzal1/authn-tutorial/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/figonzal1%2Fauthn-tutorial/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":"/packages/angular-17","pr_created_at":"2026-01-08T10:16:12.000Z","version_change":null,"issue":{"uuid":"3792267928","node_id":"PR_kwDOJd2bus68Fro7","number":1627,"state":"open","title":"build(deps): bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /packages/angular-17","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":8,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-01-08T10:16:12.000Z","updated_at":"2026-01-20T12:00:35.367Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.7"}],"path":"/packages/angular-17","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d699eef2ca32e07dfb1dec5ed2eac61c81664e68\"\u003e\u003ccode\u003ed699eef\u003c/code\u003e\u003c/a\u003e docs: add docs for transform property in built-in loaders\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff531752b0253a4b8d325a6c1bf257f4e0b60fcf\"\u003e\u003ccode\u003eff53175\u003c/code\u003e\u003c/a\u003e refactor(forms): remove \u003ccode\u003ecustomError()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8aa77557f108bf66fc93fba01e072964dbe1fa92\"\u003e\u003ccode\u003e8aa7755\u003c/code\u003e\u003c/a\u003e docs: update angular.io links to angular.dev in comments, TSDoc, and warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003ccode\u003eae1dc16\u003c/code\u003e\u003c/a\u003e fix(forms): clean up abort listener after timeout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003ccode\u003ee3fba18\u003c/code\u003e\u003c/a\u003e feat(forms): add \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/af1d4acb9db38636f80207ca5f013bca26db5021\"\u003e\u003ccode\u003eaf1d4ac\u003c/code\u003e\u003c/a\u003e refactor(forms): bind native properties on interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/0e8b9d8cde420734c1134eb9fe22c44b2da27057\"\u003e\u003ccode\u003e0e8b9d8\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff37a13913353366feecfbb8bb161ee4f4c8e0b6\"\u003e\u003ccode\u003eff37a13\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4ba820d365aec7c12c193a950ebcbb63793c711\"\u003e\u003ccode\u003ea4ba820\u003c/code\u003e\u003c/a\u003e refactor(forms): bind field properties to all directives on native controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45bfd824bfba53aac406a72c1d3f1b8ab793a78f\"\u003e\u003ccode\u003e45bfd82\u003c/code\u003e\u003c/a\u003e docs(forms): add documentation links to Signal Forms API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e21076d0682c0ba641dd66723ac02f084e72dee9\"\u003e\u003ccode\u003ee21076d\u003c/code\u003e\u003c/a\u003e docs(forms): fix duplicate validator reference titles in AbstractControl\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/badge/9748b0d5da-fix-green\" alt=\"fix - 9748b0d5da\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e\u003cimg src=\"https://img.shields.io/badge/6bd22df987-fix-green\" alt=\"fix - 6bd22df987\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e\u003cimg src=\"https://img.shields.io/badge/41cd4a6af8-fix-green\" alt=\"fix - 41cd4a6af8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e\u003cimg src=\"https://img.shields.io/badge/5e9e09aee0-fix-green\" alt=\"fix - 5e9e09aee0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.7 (2026-01-07)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e8e808740c9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e63b1cdcf70\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e3c3ae0cb64\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e523dbaf1c3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e4d9c4567ed\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003ecd405685af\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e778460fcca\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e7c74674eb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e0edbee4550\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003ef9c29572d2\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003ee3fba182f9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e561772b152\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003ef0fb1d8581\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003eec110f170b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003eae1dc16bb0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e9748b0d5da\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport custom controls with non signal-based models\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6bd22df987e433a9e3cb759e35eb6403991cf4b7\"\u003e6bd22df987\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eSupport readonly arrays in signal forms\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/41cd4a6af800cf7807c46862c99ae036457d8fa7\"\u003e41cd4a6af8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eFix RouterLink href not updating with \u003ccode\u003equeryParamsHandling\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5e9e09aee0c08901d2a4d48b60bd13692c73e76e\"\u003e5e9e09aee0\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition \u003ccode\u003eupdateCallbackDone\u003c/code\u003e promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.4 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.7/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.7\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e808740c9311daa0f1c9bab8596ed5e54bdcc6a\"\u003e\u003cimg src=\"https://img.shields.io/badge/8e808740c9-fix-green\" alt=\"fix - 8e808740c9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ebetter types for a few expression AST nodes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/63b1cdcf70e6de448e8fa4ba1732d7bd7b5400d1\"\u003e\u003cimg src=\"https://img.shields.io/badge/63b1cdcf70-fix-green\" alt=\"fix - 63b1cdcf70\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproduce accurate span for typeof and void expressions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3c3ae0cb64bb112d7167fd9b0bf7739f0c9e6a39\"\u003e\u003cimg src=\"https://img.shields.io/badge/3c3ae0cb64-fix-green\" alt=\"fix - 3c3ae0cb64\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprovide location information for literal map keys\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/523dbaf1c3646ce27f1cf2e4cfc84c730fea8da9\"\u003e\u003cimg src=\"https://img.shields.io/badge/523dbaf1c3-fix-green\" alt=\"fix - 523dbaf1c3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003estop ThisReceiver inheritance from ImplicitReceiver\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4d9c4567edfb8dd424a3336ef54ffdfc6ca7c15f\"\u003e\u003cimg src=\"https://img.shields.io/badge/4d9c4567ed-fix-green\" alt=\"fix - 4d9c4567ed\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eensure component import diagnostics are reported within the \u003ccode\u003eimports\u003c/code\u003e expression\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cd405685afbfad530de7fb841ad352d2b702a9a4\"\u003e\u003cimg src=\"https://img.shields.io/badge/cd405685af-fix-green\" alt=\"fix - cd405685af\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix up spelling of diagnostic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/778460fccac13d8667bb53fa24ba977a930c0253\"\u003e\u003cimg src=\"https://img.shields.io/badge/778460fcca-fix-green\" alt=\"fix - 778460fcca\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport qualified names in \u003ccode\u003etypeof\u003c/code\u003e type references\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c74674eb07491f808f79976e3e21787a841aefb\"\u003e\u003cimg src=\"https://img.shields.io/badge/7c74674eb0-fix-green\" alt=\"fix - 7c74674eb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid leaking view data in animations\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0edbee4550e85b933e9bd2ba3c5511ef6fbf7304\"\u003e\u003cimg src=\"https://img.shields.io/badge/0edbee4550-fix-green\" alt=\"fix - 0edbee4550\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexplicitly cast signal node value to String\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f9c29572d28feef878c73edad562b3a6451825a6\"\u003e\u003cimg src=\"https://img.shields.io/badge/f9c29572d2-fix-green\" alt=\"fix - f9c29572d2\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esanitize sensitive attributes on SVG script elements\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3fba182f90a2673040cf267a970c54c07d4840f\"\u003e\u003cimg src=\"https://img.shields.io/badge/e3fba182f9-feat-blue\" alt=\"feat - e3fba182f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd \u003ccode\u003e[formField]\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/561772b152458e1d91d4bf3ef45d9645a731f2b1\"\u003e\u003cimg src=\"https://img.shields.io/badge/561772b152-fix-green\" alt=\"fix - 561772b152\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003edirty\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f0fb1d8581671ca499bcb4790b0549825eb36a91\"\u003e\u003cimg src=\"https://img.shields.io/badge/f0fb1d8581-fix-green\" alt=\"fix - f0fb1d8581\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003ehidden\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ec110f170bbba95f023c8ae0e4429c35bfedc572\"\u003e\u003cimg src=\"https://img.shields.io/badge/ec110f170b-fix-green\" alt=\"fix - ec110f170b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow custom controls to require \u003ccode\u003epending\u003c/code\u003e input\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1dc16bb0d30b6e87b0f98b7989e6685d856e31\"\u003e\u003cimg src=\"https://img.shields.io/badge/ae1dc16bb0-fix-green\" alt=\"fix - ae1dc16bb0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eclean up abort listener after timeout\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9748b0d5da6ffb1fd2498b23cc452240f46e0549\"\u003e\u003cimg src=\"https://img.shields.io/...\n\n_Description has been truncated_","html_url":"https://github.com/scania-digital-design-system/tegel/pull/1627","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/scania-digital-design-system%2Ftegel/issues/1627","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1627/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2026-01-03T23:23:01.000Z","version_change":null,"issue":{"uuid":"3778586290","node_id":"PR_kwDOOXF-tc67ZKBa","number":25,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":"2026-02-20T03:31:25.000Z","author_association":null,"state_reason":null,"created_at":"2026-01-03T23:23:01.000Z","updated_at":"2026-02-20T03:31:27.000Z","time_to_close":4075704,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.6"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/the-virus-of-doom/space-lander/network/alerts).\n\n\u003c/details\u003e\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.","html_url":"https://github.com/the-virus-of-doom/space-lander/pull/25","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/the-virus-of-doom%2Fspace-lander/issues/25","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/25/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":"/repl/appengine/web","pr_created_at":"2025-12-25T06:58:18.000Z","version_change":null,"issue":{"uuid":"3761517356","node_id":"PR_kwDONbfSmc66igi5","number":5,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /repl/appengine/web","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-12-25T06:58:18.000Z","updated_at":"2025-12-25T07:01:17.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.6","new_version":"21.0.6"}],"path":"/repl/appengine/web","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.6 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/gomodules/cel-go/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/gomodules/cel-go/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/gomodules%2Fcel-go/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-23T22:40:03.000Z","version_change":null,"issue":{"uuid":"3758735147","node_id":"PR_kwDOBv2NMs66ZmxC","number":327,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-02-11T21:52:56.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-23T22:40:03.000Z","updated_at":"2026-02-11T21:53:05.000Z","time_to_close":4317173,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.14","new_version":"21.0.6"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d9d2b83f680efb60c694b38d35dfe850c756b1f\"\u003e\u003ccode\u003e6d9d2b8\u003c/code\u003e\u003c/a\u003e refactor(common): remove redundant providedIn: 'root' from injection tokens\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003ccode\u003e729b964\u003c/code\u003e\u003c/a\u003e refactor(forms): rename field to fieldTree in FieldContext and ValidationError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5afb1eb60077b22f7aeff47b236345eafd1a7e84\"\u003e\u003ccode\u003e5afb1eb\u003c/code\u003e\u003c/a\u003e docs(forms): improve JSDoc for Signal Forms Schema types\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3151c05e047c17a73765713a0069b2828e52cf42\"\u003e\u003ccode\u003e3151c05\u003c/code\u003e\u003c/a\u003e refactor(forms): add signal forms to the type tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/45e967b295fd78b9d5bae262badb62c6cb44603c\"\u003e\u003ccode\u003e45e967b\u003c/code\u003e\u003c/a\u003e refactor(forms): convert Signal Forms errors to use RuntimeError\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003ccode\u003e81772b4\u003c/code\u003e\u003c/a\u003e feat(forms): pass field directive to class config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d92f051052e7ea5059be3a894dd70fdf51869b6\"\u003e\u003ccode\u003e8d92f05\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused \u003ccode\u003eplatformIsServer\u003c/code\u003e  flag from renderer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.14 to 21.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.6\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e\u003cimg src=\"https://img.shields.io/badge/4c8fb3631d-fix-green\" alt=\"fix - 4c8fb3631d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e\u003cimg src=\"https://img.shields.io/badge/48492524ea-fix-green\" alt=\"fix - 48492524ea\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e\u003cimg src=\"https://img.shields.io/badge/81772b420d-feat-blue\" alt=\"feat - 81772b420d\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e\u003cimg src=\"https://img.shields.io/badge/729b96476b-refactor-yellow\" alt=\"refactor - 729b96476b\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003e\u003cimg src=\"https://img.shields.io/badge/e0694df3ec-fix-green\" alt=\"fix - e0694df3ec\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e\u003cimg src=\"https://img.shields.io/badge/5047be4bc1-fix-green\" alt=\"fix - 5047be4bc1\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.6 (2025-12-17)\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes (affecting only experimental features)\u003c/h2\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe shape of \u003ccode\u003eSignalFormsConfig.classes\u003c/code\u003e has changed\u003c/p\u003e\n\u003cp\u003ePreviously each function in the \u003ccode\u003eclasses\u003c/code\u003e map took a \u003ccode\u003eFieldState\u003c/code\u003e. Now\nit takes a \u003ccode\u003eField\u003c/code\u003e directive.\u003c/p\u003e\n\u003cp\u003eFor example if you previously had:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': (state) =\u0026gt; state.valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou would need to update to:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eprovideSignalFormsConfig({\n  classes: {\n    'my-valid': ({state}) =\u0026gt; state().valid()\n  }\n})\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e(cherry picked from commit 348f149e8b06d6885f54bac4cf03a9481a8b19b7)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e(cherry picked from commit ae0c59028a2f393ea5716bf222db2c38e7a3989f)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4c8fb3631d58e22d693aba0b89243f2e9ecb0807\"\u003e4c8fb3631d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ethrow better errors for potential circular references\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48492524ea4adfa232b0daee0d955924be31ebea\"\u003e48492524ea\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse mutable ResponseInit type for RESPONSE_INIT token\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/81772b420dcda2cbe2a8cb75e50c6da2e1ecdc68\"\u003e81772b420d\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003epass field directive to class config\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/729b96476b73f1670a0f7c6ab3f36be9d38ebcac\"\u003e729b96476b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erefactor\u003c/td\u003e\n\u003ctd\u003erename field to fieldTree in FieldContext and ValidationError\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003elanguage-service\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/e0694df3eccae3d31a4ea537dffe1db1368ef34a\"\u003ee0694df3ec\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid interpolation highlighting inside \u003ca href=\"https://github.com/let\"\u003e\u003ccode\u003e@​let\u003c/code\u003e\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5047be4bc1c6f6016263703c743f8033f669f0ee\"\u003e5047be4bc1\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ePrevent language service from crashing on suggestion diagnostic errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.3 (2025-12-11)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/feed89e83cea5724fba29c24da4a5fe943ce13c6\"\u003e\u003ccode\u003efeed89e\u003c/code\u003e\u003c/a\u003e ci: reformat files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.6/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nYou can trigger a rebase of this PR by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/TheJacksonLaboratory/hpo-web/network/alerts).\n\n\u003c/details\u003e\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.\n","html_url":"https://github.com/TheJacksonLaboratory/hpo-web/pull/327","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheJacksonLaboratory%2Fhpo-web/issues/327","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/327/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-12T22:21:44.000Z","version_change":null,"issue":{"uuid":"3724998755","node_id":"PR_kwDOIXei4M64pqHc","number":11,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-12T23:11:48.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-12T22:21:44.000Z","updated_at":"2025-12-12T23:11:56.000Z","time_to_close":3004,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.10","new_version":"21.0.5"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/56418b108e27e2ff4a3cae39b082ea2db5ffce79\"\u003e\u003ccode\u003e56418b1\u003c/code\u003e\u003c/a\u003e docs: add documentation for \u003ccode\u003eHTTP_TRANSFER_CACHE_ORIGIN_MAP\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003ccode\u003e4fd2b72\u003c/code\u003e\u003c/a\u003e fix(forms): fix signal forms type error\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003ccode\u003ecbb1017\u003c/code\u003e\u003c/a\u003e fix(forms): allow resetting with empty string\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003ccode\u003e6d74755\u003c/code\u003e\u003c/a\u003e fix(forms): Reuse key in parent in compat structure\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003ccode\u003ef254ff4\u003c/code\u003e\u003c/a\u003e feat(forms): expose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003ccode\u003e5880fbc\u003c/code\u003e\u003c/a\u003e feat(forms): redo the signal forms metadata API\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003ccode\u003e55fc677\u003c/code\u003e\u003c/a\u003e fix(forms): add signals for dirty, hidden, and pending states in custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4c436a058add7507a6e49421a97e7c40d2de655\"\u003e\u003ccode\u003ea4c436a\u003c/code\u003e\u003c/a\u003e refactor: followup cleanup for \u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65758\"\u003e#65758\u003c/a\u003e fallout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7de8558219a50028c245df60528fc880d8db9662\"\u003e\u003ccode\u003e7de8558\u003c/code\u003e\u003c/a\u003e refactor(forms): Break logic.ts into separate files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003ccode\u003ebf1c12c\u003c/code\u003e\u003c/a\u003e fix(forms): memoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.10 to 21.0.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.5\u003c/h2\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e\u003cimg src=\"https://img.shields.io/badge/69d243abb74-fix-green\" alt=\"fix - 69d243abb74\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e\u003cimg src=\"https://img.shields.io/badge/4fd2b722b40-fix-green\" alt=\"fix - 4fd2b722b40\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.4\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f901cc9eb328bed74fd7f09607e54154254d4a97\"\u003e\u003cimg src=\"https://img.shields.io/badge/f901cc9eb32-perf-orange\" alt=\"perf - f901cc9eb32\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/65297c62011ae353f8555738688a83a5fba5ea4e\"\u003e\u003cimg src=\"https://img.shields.io/badge/65297c62011-fix-green\" alt=\"fix - 65297c62011\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f254ff4f2e014064b4d6073341dec0c5a7a754bf\"\u003e\u003cimg src=\"https://img.shields.io/badge/f254ff4f2e0-feat-blue\" alt=\"feat - f254ff4f2e0\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5880fbc73c6ac42976b3ada9803965bc20d047db\"\u003e\u003cimg src=\"https://img.shields.io/badge/5880fbc73c6-feat-blue\" alt=\"feat - 5880fbc73c6\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/55fc677cef4409302bc474ff316d392097a034e7\"\u003e\u003cimg src=\"https://img.shields.io/badge/55fc677cef4-fix-green\" alt=\"fix - 55fc677cef4\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbb10179c8098f6a20b0bc365a492f14e4d2a51a\"\u003e\u003cimg src=\"https://img.shields.io/badge/cbb10179c80-fix-green\" alt=\"fix - cbb10179c80\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bf1c12cd932028dc4bb50914c64bbb6d882b6ec1\"\u003e\u003cimg src=\"https://img.shields.io/badge/bf1c12cd932-fix-green\" alt=\"fix - bf1c12cd932\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d7475582f95720b4487f663d339a18a25374481\"\u003e\u003cimg src=\"https://img.shields.io/badge/6d7475582f9-fix-green\" alt=\"fix - 6d7475582f9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.5 (2025-12-11)\u003c/h1\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/69d243abb7438c37b9ef763755f8fb7fdee165be\"\u003e69d243abb74\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid false-positive deprecation when using \u003ccode\u003eInjectionToken\u003c/code\u003e with factory only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4fd2b722b4054181a6e5f09a3cc657ae05541782\"\u003e4fd2b722b40\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003efix signal forms type error\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.2 (2025-12-10)\u003c/h1\u003e\n\u003ch2\u003eDeprecations\u003c/h2\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eVERSION\u003c/code\u003e from \u003ccode\u003e@angular/upgrade\u003c/code\u003e is deprecated. Please use the entry from \u003ccode\u003e@angular/upgrade/static\u003c/code\u003e instead.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ae1c0dc49002665c10d4e44f530f4cb8d1e35b8d\"\u003eae1c0dc4900\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003echain query creation instructions\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8a3f3a91cf6919f11c1583afeb71b65488f8cba4\"\u003e8a3f3a91cf6\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eexpand type for native controls with a dynamic type\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/aff8b248b35931cbe7d644ad2594144b75064ca6\"\u003eaff8b248b35\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eexpose element on signal forms \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ebc5c2b083a90fde6fced3521be434a414ef29dd\"\u003eebc5c2b083a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eredo the signal forms metadata API\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9fe95665813e24544d00dcf463658067da745ac2\"\u003e9fe95665813\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eadd signals for dirty, hidden, and pending states in custom controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/14713d09923b5315ac7c6f20acc06fc69ff0ed79\"\u003e14713d09923\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow resetting with empty string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/b96f65a963febab376f2a783cf4313a8b8140efe\"\u003eb96f65a963f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ememoize reads of child fields in signal forms (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65802\"\u003e#65802\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/179b4cba67b95563da27fd5f12dd2acc910a1a52\"\u003e179b4cba67b\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eReuse key in parent in compat structure\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eupgrade\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/288238abef8fbd80a353be7ff3f00f08bc49ec94\"\u003e\u003ccode\u003e288238a\u003c/code\u003e\u003c/a\u003e refactor(core): correct all \u003ccode\u003etypeof ngDevMode\u003c/code\u003e comparison patterns introduced...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/v21.0.5/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/ehabyanni/MoviesSite/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/ehabyanni/MoviesSite/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ehabyanni%2FMoviesSite/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-05T10:38:34.000Z","version_change":null,"issue":{"uuid":"3698440675","node_id":"PR_kwDOFkeL6s63RK1y","number":61,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-12-05T10:38:34.000Z","updated_at":"2025-12-05T10:38:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"16.2.7","new_version":"21.0.3"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003ccode\u003e20474d3\u003c/code\u003e\u003c/a\u003e fix(http): enable XSRF protection for same-origin absolute URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003ccode\u003e6b4ab87\u003c/code\u003e\u003c/a\u003e feat(forms): Allows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003ccode\u003e609699a\u003c/code\u003e\u003c/a\u003e perf(core): tree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003ccode\u003ea5dbd4b\u003c/code\u003e\u003c/a\u003e fix(forms): support dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/017672f742935e660510f728cd9e67e3ad1ba90b\"\u003e\u003ccode\u003e017672f\u003c/code\u003e\u003c/a\u003e refactor(compiler): Generate the \u003ccode\u003econtrolCreate\u003c/code\u003e instruction after the native...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8e0df4083d5294a841d751ac1d1f8b2e97ef7bba\"\u003e\u003ccode\u003e8e0df40\u003c/code\u003e\u003c/a\u003e docs(docs-infra): Show examples on function overloads\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 16.2.7 to 21.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.3\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e\u003cimg src=\"https://img.shields.io/badge/5a80a48e96-fix-green\" alt=\"fix - 5a80a48e96\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e\u003cimg src=\"https://img.shields.io/badge/1f1856e897-fix-green\" alt=\"fix - 1f1856e897\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e\u003cimg src=\"https://img.shields.io/badge/8c3304c766-fix-green\" alt=\"fix - 8c3304c766\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e\u003cimg src=\"https://img.shields.io/badge/4bb085311e-fix-green\" alt=\"fix - 4bb085311e\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e\u003cimg src=\"https://img.shields.io/badge/609699ae17-perf-orange\" alt=\"perf - 609699ae17\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e\u003cimg src=\"https://img.shields.io/badge/6b4ab876e8-feat-blue\" alt=\"feat - 6b4ab876e8\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003e\u003cimg src=\"https://img.shields.io/badge/a5dbd4b382-fix-green\" alt=\"fix - a5dbd4b382\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e\u003cimg src=\"https://img.shields.io/badge/20474d3f0f-fix-green\" alt=\"fix - 20474d3f0f\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003cimg src=\"https://img.shields.io/badge/48b89f9fbe-fix-green\" alt=\"fix - 48b89f9fbe\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.3 (2025-12-03)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/5a80a48e962f72825050202198b32abbfee66714\"\u003e5a80a48e96\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eavoid allocating an object for signals in production mode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/1f1856e897e0a10e2ca6d934c80fd69d1ac06210\"\u003e1f1856e897\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003echeck that field radio button values are strings\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8c3304c766131b031b736ee3fe2ec9c9a42fbe07\"\u003e8c3304c766\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun animation queue in environment injector context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/4bb085311e24966ef2dd673f23746988c449c7ff\"\u003e4bb085311e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eunable to inject viewProviders when host directive with providers is present\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/609699ae1781a9160b0f474b7ebe0998221c0722\"\u003e609699ae17\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003etree shake unused dynamic \u003ccode\u003e[field]\u003c/code\u003e binding instructions (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/6b4ab876e811b4e3a6f9617a2b379f62cf187403\"\u003e6b4ab876e8\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eAllows transforms on \u003ccode\u003eFormUiControl\u003c/code\u003e signals\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a5dbd4b382417fc111d6a622862a015c47027a41\"\u003ea5dbd4b382\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003esupport dynamic \u003ccode\u003e[field]\u003c/code\u003e bindings (\u003ca href=\"https://redirect.github.com/angular/angular/pull/65599\"\u003e#65599\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/20474d3f0fd7c64071add6e84acf720627e5c19b\"\u003e20474d3f0f\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eenable XSRF protection for same-origin absolute URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003erouter\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e48b89f9fbe\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003ehandle errors from view transition finished promise\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/48b89f9fbe16acff8b2f3f37853e745ed43d3a32\"\u003e\u003ccode\u003e48b89f9\u003c/code\u003e\u003c/a\u003e fix(router): handle errors from view transition finished promise\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c2a8934d129a89d7ea2b404884e5411e91dba26b\"\u003e\u003ccode\u003ec2a8934\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(router): compress synchronous end to router navigation to si...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/71362733cf7f451d213da0f5c9249cecbe50846a\"\u003e\u003ccode\u003e7136273\u003c/code\u003e\u003c/a\u003e refactor(router): compress synchronous end to router navigation to single ope...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/efe4b72abb78b8143d05294e963b6021a75b1efa\"\u003e\u003ccode\u003eefe4b72\u003c/code\u003e\u003c/a\u003e docs: fix documentation link for currentNavigation method\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.3/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/ymchandra/2048-angular/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/ymchandra/2048-angular/pull/61","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ymchandra%2F2048-angular/issues/61","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/61/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-02T19:54:53.000Z","version_change":null,"issue":{"uuid":"3687331102","node_id":"PR_kwDOJaXYtM62roEB","number":38,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-12-02T19:55:47.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T19:54:53.000Z","updated_at":"2025-12-02T19:55:55.000Z","time_to_close":54,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.8","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.8 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/choan312/choan_portfolio/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/choan312/choan_portfolio/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/choan312%2Fchoan_portfolio/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-02T16:49:36.000Z","version_change":null,"issue":{"uuid":"3686702918","node_id":"PR_kwDOBctMdM62pfLb","number":68,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-29T16:03:34.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T16:49:36.000Z","updated_at":"2025-12-29T16:03:35.000Z","time_to_close":2330038,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/murraycu/angular-bigoquiz-client/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/murraycu/angular-bigoquiz-client/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/murraycu%2Fangular-bigoquiz-client/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-12-02T12:11:22.000Z","version_change":null,"issue":{"uuid":"3685540962","node_id":"PR_kwDOEHoAWs62lh4b","number":28,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-02T12:16:36.000Z","author_association":null,"state_reason":null,"created_at":"2025-12-02T12:11:22.000Z","updated_at":"2025-12-02T12:16:38.000Z","time_to_close":314,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"10.0.1","new_version":"21.0.2"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 10.0.1 to 21.0.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.2\u003c/h2\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e\u003cimg src=\"https://img.shields.io/badge/78fd159b78-fix-green\" alt=\"fix - 78fd159b78\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.2 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/78fd159b78d32cb8b94891e3fc6013076d7838af\"\u003e78fd159b78\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e20.3.15 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/d1ca8ae04390f050039fdb653a6147d75d48f81e\"\u003ed1ca8ae043\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.17 (2025-12-01)\u003c/h1\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7c42e2ebebc135e9949a9e9a0295ef3ccf261b82\"\u003e7c42e2ebeb\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSS via SVG animation \u003ccode\u003eattributeName\u003c/code\u003e and MathML/SVG URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e19.2.16 (2025-11-26)\u003c/h1\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/05fe6686a97fa0bcd3cf157805b3612033f975bc\"\u003e05fe6686a9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.1.0-next.0 (2025-11-25)\u003c/h1\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a62162d2ee4bdd6f36631aaf645fa741d56be996\"\u003e\u003ccode\u003ea62162d\u003c/code\u003e\u003c/a\u003e docs: Update router docs to add references and components input fixed syntaxis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9d6b86958a27f1c61b1846d3fdb7385ef9987228\"\u003e\u003ccode\u003e9d6b869\u003c/code\u003e\u003c/a\u003e docs(docs-infra): fix missing syntax highlighting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/35dc3ecfdaebbcd0e8ab4ae92da1a1c820aa09f9\"\u003e\u003ccode\u003e35dc3ec\u003c/code\u003e\u003c/a\u003e refactor(common): update examples to align with Angular best practices\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/99501651455ae9742b2eef10e5b7c22ffbd17f1d\"\u003e\u003ccode\u003e9950165\u003c/code\u003e\u003c/a\u003e docs: adds guide references to router APIs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7811d95b89826820402e1e2f5a52fbeb81091960\"\u003e\u003ccode\u003e7811d95\u003c/code\u003e\u003c/a\u003e refactor(core): improve resource loading with async/await\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e5a19cb736b91997ba3532c81985284e97ea451e\"\u003e\u003ccode\u003ee5a19cb\u003c/code\u003e\u003c/a\u003e refactor(router): add ngDevMode guards to InjectionToken names and cleanup im...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/9db114f4ff17478d4f5322a96f866b8c0732ce11\"\u003e\u003ccode\u003e9db114f\u003c/code\u003e\u003c/a\u003e refactor(router): replace Optional with inject() flags\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.2/packages/router\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/veerendervoskula/recipe-selection/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/veerendervoskula/recipe-selection/pull/28","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/veerendervoskula%2Frecipe-selection/issues/28","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/28/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-11-28T07:16:32.000Z","version_change":null,"issue":{"uuid":"3673877066","node_id":"PR_kwDOJaXYtM61-2BY","number":36,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2025-11-28T07:17:07.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-28T07:16:32.000Z","updated_at":"2025-11-28T07:17:15.000Z","time_to_close":35,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"15.2.8","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 15.2.8 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/choan312/choan_portfolio/pull/36","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/choan312%2Fchoan_portfolio/issues/36","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/36/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-11-27T23:21:53.000Z","version_change":null,"issue":{"uuid":"3673202052","node_id":"PR_kwDOJM6drs618oyc","number":6,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2025-12-02T22:39:42.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T23:21:53.000Z","updated_at":"2025-12-02T22:39:44.000Z","time_to_close":429469,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"14.3.0","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 14.3.0 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/ComputerBoer/Auctionviewer/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ComputerBoer%2FAuctionviewer/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-11-27T21:17:32.000Z","version_change":null,"issue":{"uuid":"3673024679","node_id":"PR_kwDOHf2mwM618C9V","number":61,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-02-10T00:09:18.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T21:17:32.000Z","updated_at":"2026-02-10T00:09:27.000Z","time_to_close":6403906,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.2.14","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.2.14 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://gith...\n\n_Description has been truncated_","html_url":"https://github.com/Laserfiche/lf-sample-OAuth-SPA-angular-cdn/pull/61","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Laserfiche%2Flf-sample-OAuth-SPA-angular-cdn/issues/61","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/61/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":"/samples/AspireWithJavaScript/AspireJavaScript.Angular","pr_created_at":"2025-11-27T18:32:07.000Z","version_change":null,"issue":{"uuid":"3672675794","node_id":"PR_kwDOP5Y0us6163D2","number":26,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /samples/AspireWithJavaScript/AspireJavaScript.Angular","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-11-27T18:32:07.000Z","updated_at":"2025-11-27T18:32:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.1.1","new_version":"21.0.1"}],"path":"/samples/AspireWithJavaScript/AspireJavaScript.Angular","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.1.1 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/blogtheristo/aspire-samples95/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/blogtheristo%2Faspire-samples95/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":"/client","pr_created_at":"2025-11-27T18:00:24.000Z","version_change":null,"issue":{"uuid":"3672601145","node_id":"PR_kwDOConWm8616nFG","number":92,"state":"closed","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router in /client","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-01-21T20:49:53.000Z","author_association":null,"state_reason":null,"created_at":"2025-11-27T18:00:24.000Z","updated_at":"2026-01-21T20:49:55.000Z","time_to_close":4762169,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"17.3.12","new_version":"21.0.1"}],"path":"/client","ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 17.3.12 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://gith...\n\n_Description has been truncated_\n\n\u003e **Note**\n\u003e Automatic rebases have been disabled on this pull request as it has been open for over 30 days.","html_url":"https://github.com/emschu/oerc/pull/92","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/emschu%2Foerc/issues/92","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/92/packages"}},{"old_version":null,"new_version":null,"update_type":null,"path":null,"pr_created_at":"2025-11-27T17:34:24.000Z","version_change":null,"issue":{"uuid":"3672533096","node_id":"PR_kwDOCmpbss616YFv","number":63,"state":"open","title":"Bump @angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic and @angular/router","user":"dependabot[bot]","labels":["dependencies","javascript"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2025-11-27T17:34:24.000Z","updated_at":"2025-12-24T04:00:13.485Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"@angular/common, @angular/forms, @angular/platform-browser, @angular/platform-browser-dynamic"},{"name":"@angular/router","repository_url":"https://github.com/angular/angular","old_version":"18.0.4","new_version":"21.0.1"}],"path":null,"ecosystem":"npm"},"body":"Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common), [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms), [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser), [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) and [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router). These dependencies needed to be updated together.\nUpdates `@angular/common` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/common\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003ccode\u003e3240d85\u003c/code\u003e\u003c/a\u003e fix(http): prevent XSRF token leakage to protocol-relative URLs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6de892659473f8748fd87dbdb6100d48a1009bf3\"\u003e\u003ccode\u003e6de8926\u003c/code\u003e\u003c/a\u003e refactor(core): add debug name to resource (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/common/issues/64172\"\u003e#64172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/00ffe91c898e182c36f9ce032dd2efc925109b71\"\u003e\u003ccode\u003e00ffe91\u003c/code\u003e\u003c/a\u003e refactor(common): removes unused NgModuleFactory config in NgComponentOutlet\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8765b66f5ad33e5ad99eb56507ddf9b98f7f0eb2\"\u003e\u003ccode\u003e8765b66\u003c/code\u003e\u003c/a\u003e docs: add reference to Built-in Pipes in multiple pipe files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ab98e71c413928dbc75703e3de3131cf93100837\"\u003e\u003ccode\u003eab98e71\u003c/code\u003e\u003c/a\u003e fix(common): remove placeholder image listeners once view is removed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/650af71026752525f5b0978782c906c5348a6bbb\"\u003e\u003ccode\u003e650af71\u003c/code\u003e\u003c/a\u003e refactor(http): migrate XSRF classes to use inject() function\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a3c2fe819ab1e39b3f9a9a26e6aae7b90c207979\"\u003e\u003ccode\u003ea3c2fe8\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;refactor(common): Removes unused imports to clean up dependencies\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6d3e0f1a51f60991c7aad8c2518c10b33c89b87c\"\u003e\u003ccode\u003e6d3e0f1\u003c/code\u003e\u003c/a\u003e refactor(common): Removes unused imports to clean up dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/common\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/forms` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/forms\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e3f5f34732c90989517f0f0b1c511d0f5ced39c3\"\u003e\u003ccode\u003ee3f5f34\u003c/code\u003e\u003c/a\u003e refactor(forms): Make reset take value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003ccode\u003e7d5c7cf\u003c/code\u003e\u003c/a\u003e feat(forms): add DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003ccode\u003e8acf5d2\u003c/code\u003e\u003c/a\u003e fix(forms): allow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/4845a33018cf2c48e37c667892c24d6c6ec81f6b\"\u003e\u003ccode\u003e4845a33\u003c/code\u003e\u003c/a\u003e refactor(forms): support custom control directives\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003ccode\u003ede5fca9\u003c/code\u003e\u003c/a\u003e fix(forms): run reset as untracked\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/91d8d55a80a1d1894827ef06e38e56de6e661575\"\u003e\u003ccode\u003e91d8d55\u003c/code\u003e\u003c/a\u003e fix(forms): Set error message of a schema error.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e682f00e29093bda29ac59c1cf685637d06e61b2\"\u003e\u003ccode\u003ee682f00\u003c/code\u003e\u003c/a\u003e refactor(forms): reduce boilerplate needed to define custom controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d89e522a1f07c4b2ac7fd2b926ae44658f9394d4\"\u003e\u003ccode\u003ed89e522\u003c/code\u003e\u003c/a\u003e fix(forms): debounce updates from interop controls\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/e1a7c35370a628cbd594fca346d4d4bd52c627e0\"\u003e\u003ccode\u003ee1a7c35\u003c/code\u003e\u003c/a\u003e refactor(forms): improve typing on min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/ff4633dab863409beeb10d87d078e044be9be0cd\"\u003e\u003ccode\u003eff4633d\u003c/code\u003e\u003c/a\u003e refactor(forms): allow passing number|string|null paths to min \u0026amp; max (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/forms/issues/65212\"\u003e#65212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/forms\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/f550f4ab4abd9e46a368b3a305eee683c798829f\"\u003e\u003ccode\u003ef550f4a\u003c/code\u003e\u003c/a\u003e docs: ExperimentalIsolatedShadowDom mentions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/6213cbf1a881c89be1336f763f509872bc481dd9\"\u003e\u003ccode\u003e6213cbf\u003c/code\u003e\u003c/a\u003e refactor(core): rename \u003ccode\u003eExperimentalIsolatedShadowDom\u003c/code\u003e to \u003ccode\u003eIsolatedShadowDom\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/593f902f246ec1e1ad6b4df1e23354733fcfebe6\"\u003e\u003ccode\u003e593f902\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove unused Platform ID dependency from DomRend...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/33f833984dfade70d1ebb89b26d3d22438540f61\"\u003e\u003ccode\u003e33f8339\u003c/code\u003e\u003c/a\u003e refactor(platform-browser): remove redundant \u003ccode\u003eprovidedIn: 'root'\u003c/code\u003e from inject...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/a4fe078969c750dd069c7086e035fe893379b1fa\"\u003e\u003ccode\u003ea4fe078\u003c/code\u003e\u003c/a\u003e refactor(common): remove unused import (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64699\"\u003e#64699\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/d303cde96d0fc08680f65dea7d67754e7d5a1b54\"\u003e\u003ccode\u003ed303cde\u003c/code\u003e\u003c/a\u003e refactor(core): Remove zone toggles for test and standalone\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/70332b04532311276dd025ba00e8fcb6c1350880\"\u003e\u003ccode\u003e70332b0\u003c/code\u003e\u003c/a\u003e fix(core): pass element removal property through in all locations (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64565\"\u003e#64565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d1e9796d62c833ec79b112cd16f9192f24640ed\"\u003e\u003ccode\u003e8d1e979\u003c/code\u003e\u003c/a\u003e docs: add references to SSR guide for caching options (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser/issues/64347\"\u003e#64347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/platform-browser-dynamic` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/platform-browser-dynamic\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8ab084754b32762fb2e0552f2242cb2bf7039524\"\u003e\u003ccode\u003e8ab0847\u003c/code\u003e\u003c/a\u003e refactor(core): mark \u003ccode\u003eVERSION\u003c/code\u003e as \u003ccode\u003e@__PURE__\u003c/code\u003e for better tree-shaking\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/3bed9f0f166f6698e862cdbd360e3ba9bcceb935\"\u003e\u003ccode\u003e3bed9f0\u003c/code\u003e\u003c/a\u003e build: format md files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/c3576506b3c13389e18fa4c0c29bdf536f604142\"\u003e\u003ccode\u003ec357650\u003c/code\u003e\u003c/a\u003e refactor(core): Update tests for zoneless by default (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63668\"\u003e#63668\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/2fcafb65c5784ba151e01d808348fd68b3c39388\"\u003e\u003ccode\u003e2fcafb6\u003c/code\u003e\u003c/a\u003e build: rename defaults2.bzl to defaults.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/63383\"\u003e#63383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/fa8d8b8396c9992d25a2e0256ae895ca7c86ad66\"\u003e\u003ccode\u003efa8d8b8\u003c/code\u003e\u003c/a\u003e build: migrate all npm packages to use new rules_js based npm_package rule (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/cbc258eec8f70785c728dda615ed685742c1dc82\"\u003e\u003ccode\u003ecbc258e\u003c/code\u003e\u003c/a\u003e build: remove ts_project_interop infrastructure (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62908\"\u003e#62908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/793ff35602946748b88ae3da2542ccb7076c9290\"\u003e\u003ccode\u003e793ff35\u003c/code\u003e\u003c/a\u003e build: move http_server and generate_api_docs into defaults2.bzl (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62878\"\u003e#62878\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/8bf97d13707b8cfee3c782d1501a1e622593a697\"\u003e\u003ccode\u003e8bf97d1\u003c/code\u003e\u003c/a\u003e build: remove all usages of the interop_deps attr for ts_project and ng_proje...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/23d58777b40760644d4ce59618043b32b6c1a67c\"\u003e\u003ccode\u003e23d5877\u003c/code\u003e\u003c/a\u003e build: migrate to new toolchain usage for api goldens (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62688\"\u003e#62688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/angular/angular/commit/b84859073bf094e0da5b509f393a738ad176edd9\"\u003e\u003ccode\u003eb848590\u003c/code\u003e\u003c/a\u003e build: migrate to use web test runner rules (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic/issues/62292\"\u003e#62292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/angular/angular/commits/21.0.1/packages/platform-browser-dynamic\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `@angular/router` from 18.0.4 to 21.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/releases\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.0.1\u003c/h2\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e\u003cimg src=\"https://img.shields.io/badge/39c577bc36-fix-green\" alt=\"fix - 39c577bc36\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e\u003cimg src=\"https://img.shields.io/badge/8d3a89a477-fix-green\" alt=\"fix - 8d3a89a477\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003e\u003cimg src=\"https://img.shields.io/badge/bc34083d34-fix-green\" alt=\"fix - bc34083d34\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e\u003cimg src=\"https://img.shields.io/badge/0ea1e07174-fix-green\" alt=\"fix - 0ea1e07174\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e\u003cimg src=\"https://img.shields.io/badge/70507b8c1c-fix-green\" alt=\"fix - 70507b8c1c\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003e\u003cimg src=\"https://img.shields.io/badge/a55482fca3-fix-green\" alt=\"fix - a55482fca3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e\u003cimg src=\"https://img.shields.io/badge/49ad7c6508-fix-green\" alt=\"fix - 49ad7c6508\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003e\u003cimg src=\"https://img.shields.io/badge/cc1ec09931-perf-orange\" alt=\"perf - cc1ec09931\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e\u003cimg src=\"https://img.shields.io/badge/7d5c7cf99a-feat-blue\" alt=\"feat - 7d5c7cf99a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e\u003cimg src=\"https://img.shields.io/badge/8acf5d2756-fix-green\" alt=\"fix - 8acf5d2756\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003e\u003cimg src=\"https://img.shields.io/badge/de5fca94c5-fix-green\" alt=\"fix - de5fca94c5\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e\u003cimg src=\"https://img.shields.io/badge/3240d856d9-fix-green\" alt=\"fix - 3240d856d9\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003e\u003cimg src=\"https://img.shields.io/badge/f394215b14-fix-green\" alt=\"fix - f394215b14\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2\u003eVSCode Extension: 21.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix(language-service): address potential memory leak during project creation (89095946cf)\u003c/li\u003e\n\u003cli\u003efix(language-server): fix directory renaming on Windows (3f7111a9c3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e21.0.0\u003c/h2\u003e\n\u003ch3\u003ecommon\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/c795960ada1a7e21b8bee411e20a08c700b6e385\"\u003e\u003cimg src=\"https://img.shields.io/badge/c795960ada-feat-blue\" alt=\"feat - c795960ada\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eAdd experimental support for the Navigation API (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63406\"\u003e#63406\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/9eac43cf46993442e9de5764e2ccca98e3837939\"\u003e\u003cimg src=\"https://img.shields.io/badge/9eac43cf46-feat-blue\" alt=\"feat - 9eac43cf46\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eSupport of optional keys for the KeyValue pipe (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/48814\"\u003e#48814\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a1868c9d13991d24f893499406b29a5f2e0a388b\"\u003e\u003cimg src=\"https://img.shields.io/badge/a1868c9d13-feat-blue\" alt=\"feat - a1868c9d13\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eupdate to cldr 47 (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64032\"\u003e#64032\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/196fa500a3c282af5158fa2873df8e2a73243493\"\u003e\u003cimg src=\"https://img.shields.io/badge/196fa500a3-fix-green\" alt=\"fix - 196fa500a3\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eproperly type ngComponentOutlet (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/64561\"\u003e#64561\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7a4b225c57d8e390ec06731f5211d52d14da3a9c\"\u003e\u003cimg src=\"https://img.shields.io/badge/7a4b225c57-refactor-yellow\" alt=\"refactor - 7a4b225c57\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eimprove typing of \u003ccode\u003engComponentOutletContent\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/63674\"\u003e#63674\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/25f593ce2a623add0cbd4ab3bb0d4987793e4f34\"\u003e\u003cimg src=\"https://img.shields.io/badge/25f593ce2a-refactor-yellow\" alt=\"refactor - 25f593ce2a\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eremove\u003ccode\u003engModuleFactory\u003c/code\u003e input of \u003ccode\u003eNgComponentOutlet\u003c/code\u003e (\u003ca href=\"https://github.com/angular/angular/tree/HEAD/packages/router/issues/62838\"\u003e#62838\u003c/a\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecompiler\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/ecea909bccc3d6a3c33e77e1feb4ad0926e72f9e\"\u003e\u003cimg src=\"https://img.shields.io/badge/ecea909bcc-fix-green\" alt=\"fix - ecea909bcc\" /\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003edon't choke on unbalanced parens in declaration block\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/angular/angular/blob/main/CHANGELOG.md\"\u003e\u003ccode\u003e@​angular/router\u003c/code\u003e's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e21.0.1 (2025-11-25)\u003c/h1\u003e\n\u003ch3\u003ecompiler-cli\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/39c577bc362b263896b38c9486131d4342b8f1a8\"\u003e39c577bc36\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edo not type check native controls with ControlValueAccessor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8d3a89a477e273b9b2223b6db775955e35105963\"\u003e8d3a89a477\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eescape angular control flow in jsdoc\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/bc34083d349a7d30efb43df97de0509fd85a1996\"\u003ebc34083d34\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eignore non-existent files\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ecore\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/0ea1e071742a031d9afb7a39f8e23082cd88ca2e\"\u003e0ea1e07174\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eapply bootstrap-options migration to \u003ccode\u003eplatformBrowserDynamic\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/70507b8c1ce733b8232a12fa45037ee219b5b102\"\u003e70507b8c1c\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edebug data causing memory leak for root effects\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/a55482fca3b7e4f39d95f8ff236b6619e59b8190\"\u003ea55482fca3\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003enotify profiler events in case of errors\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/49ad7c650818ee7db321a24c89282dbf9bb250f3\"\u003e49ad7c6508\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003euse injected \u003ccode\u003eDOCUMENT\u003c/code\u003e for \u003ccode\u003eCSP_NONCE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/cc1ec099315b0f429d0b0f07c9b1bf686668db6b\"\u003ecc1ec09931\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eperf\u003c/td\u003e\n\u003ctd\u003eavoid repeat searches for field directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003eforms\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/7d5c7cf99aa5c6490f8bea950b04bd56073582a1\"\u003e7d5c7cf99a\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efeat\u003c/td\u003e\n\u003ctd\u003eadd DI option for classes on \u003ccode\u003eField\u003c/code\u003e directive\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/8acf5d27563ec51cc76971732d50e1f4142a3fe3\"\u003e8acf5d2756\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eallow dynamic \u003ccode\u003etype\u003c/code\u003e bindings on signal form controls\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/de5fca94c5cfafa9098d9ee270f448b90d4ac06f\"\u003ede5fca94c5\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003erun reset as untracked\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003ehttp\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/3240d856d942727372a705252f7c8c115394a41e\"\u003e3240d856d9\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003eprevent XSRF token leakage to protocol-relative URLs\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3\u003emigrations\u003c/h3\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCommit\u003c/th\u003e\n\u003cth\u003eType\u003c/th\u003e\n\u003cth\u003eDescription\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://github.com/angular/angular/commit/f394215b14d59c49e1433472ecdd2fd5547cc769\"\u003ef394215b14\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003efix\u003c/td\u003e\n\u003ctd\u003edetect structural ngTemplateOutlet and ngComponentOutlet\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch1\u003e21.0.0 (2025-11-19)\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"http://goo.gle/angular-v21-blog\"\u003eBlog post \u0026quot;Announcing Angular v21\u0026quot;\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.co...\n\n_Description has been truncated_","html_url":"https://github.com/EmmanuelTsouris/media-browser/pull/63","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmmanuelTsouris%2Fmedia-browser/issues/63","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/63/packages"}}]}