From 80026d1d70491069c1cfe17d688854eb59ebaf46 Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Sun, 15 Jun 2025 16:16:53 +0200 Subject: [PATCH 1/3] =?UTF-8?q?docs(angular):=20=F0=9F=93=9D=20add=20"why?= =?UTF-8?q?=20angular"=20draft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../05-prep-station/v20/01-flushing-flusheffects.md | 2 +- apps/cookbook/docs/angular/01-why-angular/index.md | 6 ++++++ .../01-components/01-why-components/index.md | 0 .../01-components/01-why-components/whiskmate.png | Bin .../02-component-anatomy/component-anatomy.png | Bin .../01-components/02-component-anatomy/index.md | 0 .../01-components/03-interpolation/index.md | 0 .../01-components/04-property-binding/index.md | 0 .../01-components/05-event-binding/index.md | 0 .../01-components/06-view-model/index.md | 0 .../01-components/07-conditionals/index.md | 0 .../01-components/08-loops/index.md | 0 .../01-components/09-styling/index.md | 0 .../01-components/_category_.yml | 0 .../02-signal-basics/index.md | 0 .../03-component-interaction/01-hierarchy/index.md | 0 .../03-component-interaction/02-inputs/index.md | 0 .../03-component-interaction/03-outputs/index.md | 0 .../03-component-interaction/_category_.yml | 0 .../04-forms/01-reactive-forms/index.md | 0 .../04-forms/02-template-driven-forms/index.md | 0 .../04-forms/index.md | 0 .../05-dependency-injection/index.md | 0 .../_category_.yml | 0 .../{02-prep-station => 03-prep-station}/index.md | 0 .../v20/index.md | 0 .../v20/testing-prep-station-v20.tsx | 0 .../docs/angular/{03-glossary.md => 04-glossary.md} | 0 28 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 apps/cookbook/docs/angular/01-why-angular/index.md rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/01-why-components/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/01-why-components/whiskmate.png (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/02-component-anatomy/component-anatomy.png (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/02-component-anatomy/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/03-interpolation/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/04-property-binding/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/05-event-binding/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/06-view-model/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/07-conditionals/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/08-loops/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/09-styling/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/01-components/_category_.yml (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/02-signal-basics/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/03-component-interaction/01-hierarchy/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/03-component-interaction/02-inputs/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/03-component-interaction/03-outputs/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/03-component-interaction/_category_.yml (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/04-forms/01-reactive-forms/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/04-forms/02-template-driven-forms/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/04-forms/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/05-dependency-injection/index.md (100%) rename apps/cookbook/docs/angular/{01-core-concepts => 02-core-concepts}/_category_.yml (100%) rename apps/cookbook/docs/angular/{02-prep-station => 03-prep-station}/index.md (100%) rename apps/cookbook/docs/angular/{02-prep-station => 03-prep-station}/v20/index.md (100%) rename apps/cookbook/docs/angular/{02-prep-station => 03-prep-station}/v20/testing-prep-station-v20.tsx (100%) rename apps/cookbook/docs/angular/{03-glossary.md => 04-glossary.md} (100%) diff --git a/apps/cookbook/docs/angular-testing/05-prep-station/v20/01-flushing-flusheffects.md b/apps/cookbook/docs/angular-testing/05-prep-station/v20/01-flushing-flusheffects.md index 84623d9..c4dbfd2 100644 --- a/apps/cookbook/docs/angular-testing/05-prep-station/v20/01-flushing-flusheffects.md +++ b/apps/cookbook/docs/angular-testing/05-prep-station/v20/01-flushing-flusheffects.md @@ -16,7 +16,7 @@ It is also deprecated in favor of [`TestBed.tick()`](https://next.angular.dev/ap _Initially, [`TestBed.flushEffects()`](https://v19.angular.dev/api/core/testing/TestBedStatic#flushEffects) was planned for removal in Angular 20. As the documentation did not highlight that it was in Developer Preview, the team listened to the community's feedback and [kept it for a smoother migration](https://github.com/angular/angular/pull/61462)._ -`TestBed.tick()` is **not** a drop-in replacement for `TestBed.flushEffects()` — it does more than just flushing root effects. It triggers Angular [synchronization](../../../angular/03-glossary.md#angular-synchronization) _(change detection, root effects, component effects, etc...)_, making tests more symmetric to production, and therefore more reliable. +`TestBed.tick()` is **not** a drop-in replacement for `TestBed.flushEffects()` — it does more than just flushing root effects. It triggers Angular [synchronization](../../../angular/04-glossary.md#angular-synchronization) _(change detection, root effects, component effects, etc...)_, making tests more symmetric to production, and therefore more reliable. In most cases, that's an improvement, but some tests with questionable design might break. diff --git a/apps/cookbook/docs/angular/01-why-angular/index.md b/apps/cookbook/docs/angular/01-why-angular/index.md new file mode 100644 index 0000000..5c33952 --- /dev/null +++ b/apps/cookbook/docs/angular/01-why-angular/index.md @@ -0,0 +1,6 @@ +--- +slug: /angular/why-angular +draft: true +--- + +# Why Angular? diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/01-why-components/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/01-why-components/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/01-why-components/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/01-why-components/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/01-why-components/whiskmate.png b/apps/cookbook/docs/angular/02-core-concepts/01-components/01-why-components/whiskmate.png similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/01-why-components/whiskmate.png rename to apps/cookbook/docs/angular/02-core-concepts/01-components/01-why-components/whiskmate.png diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/02-component-anatomy/component-anatomy.png b/apps/cookbook/docs/angular/02-core-concepts/01-components/02-component-anatomy/component-anatomy.png similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/02-component-anatomy/component-anatomy.png rename to apps/cookbook/docs/angular/02-core-concepts/01-components/02-component-anatomy/component-anatomy.png diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/02-component-anatomy/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/02-component-anatomy/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/02-component-anatomy/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/02-component-anatomy/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/03-interpolation/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/03-interpolation/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/03-interpolation/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/03-interpolation/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/04-property-binding/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/04-property-binding/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/04-property-binding/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/04-property-binding/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/05-event-binding/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/05-event-binding/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/05-event-binding/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/05-event-binding/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/06-view-model/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/06-view-model/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/06-view-model/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/06-view-model/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/07-conditionals/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/07-conditionals/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/07-conditionals/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/07-conditionals/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/08-loops/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/08-loops/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/08-loops/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/08-loops/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/09-styling/index.md b/apps/cookbook/docs/angular/02-core-concepts/01-components/09-styling/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/09-styling/index.md rename to apps/cookbook/docs/angular/02-core-concepts/01-components/09-styling/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/01-components/_category_.yml b/apps/cookbook/docs/angular/02-core-concepts/01-components/_category_.yml similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/01-components/_category_.yml rename to apps/cookbook/docs/angular/02-core-concepts/01-components/_category_.yml diff --git a/apps/cookbook/docs/angular/01-core-concepts/02-signal-basics/index.md b/apps/cookbook/docs/angular/02-core-concepts/02-signal-basics/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/02-signal-basics/index.md rename to apps/cookbook/docs/angular/02-core-concepts/02-signal-basics/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/01-hierarchy/index.md b/apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/01-hierarchy/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/01-hierarchy/index.md rename to apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/01-hierarchy/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/02-inputs/index.md b/apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/02-inputs/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/02-inputs/index.md rename to apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/02-inputs/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/03-outputs/index.md b/apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/03-outputs/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/03-outputs/index.md rename to apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/03-outputs/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/_category_.yml b/apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/_category_.yml similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/03-component-interaction/_category_.yml rename to apps/cookbook/docs/angular/02-core-concepts/03-component-interaction/_category_.yml diff --git a/apps/cookbook/docs/angular/01-core-concepts/04-forms/01-reactive-forms/index.md b/apps/cookbook/docs/angular/02-core-concepts/04-forms/01-reactive-forms/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/04-forms/01-reactive-forms/index.md rename to apps/cookbook/docs/angular/02-core-concepts/04-forms/01-reactive-forms/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/04-forms/02-template-driven-forms/index.md b/apps/cookbook/docs/angular/02-core-concepts/04-forms/02-template-driven-forms/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/04-forms/02-template-driven-forms/index.md rename to apps/cookbook/docs/angular/02-core-concepts/04-forms/02-template-driven-forms/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/04-forms/index.md b/apps/cookbook/docs/angular/02-core-concepts/04-forms/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/04-forms/index.md rename to apps/cookbook/docs/angular/02-core-concepts/04-forms/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/05-dependency-injection/index.md b/apps/cookbook/docs/angular/02-core-concepts/05-dependency-injection/index.md similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/05-dependency-injection/index.md rename to apps/cookbook/docs/angular/02-core-concepts/05-dependency-injection/index.md diff --git a/apps/cookbook/docs/angular/01-core-concepts/_category_.yml b/apps/cookbook/docs/angular/02-core-concepts/_category_.yml similarity index 100% rename from apps/cookbook/docs/angular/01-core-concepts/_category_.yml rename to apps/cookbook/docs/angular/02-core-concepts/_category_.yml diff --git a/apps/cookbook/docs/angular/02-prep-station/index.md b/apps/cookbook/docs/angular/03-prep-station/index.md similarity index 100% rename from apps/cookbook/docs/angular/02-prep-station/index.md rename to apps/cookbook/docs/angular/03-prep-station/index.md diff --git a/apps/cookbook/docs/angular/02-prep-station/v20/index.md b/apps/cookbook/docs/angular/03-prep-station/v20/index.md similarity index 100% rename from apps/cookbook/docs/angular/02-prep-station/v20/index.md rename to apps/cookbook/docs/angular/03-prep-station/v20/index.md diff --git a/apps/cookbook/docs/angular/02-prep-station/v20/testing-prep-station-v20.tsx b/apps/cookbook/docs/angular/03-prep-station/v20/testing-prep-station-v20.tsx similarity index 100% rename from apps/cookbook/docs/angular/02-prep-station/v20/testing-prep-station-v20.tsx rename to apps/cookbook/docs/angular/03-prep-station/v20/testing-prep-station-v20.tsx diff --git a/apps/cookbook/docs/angular/03-glossary.md b/apps/cookbook/docs/angular/04-glossary.md similarity index 100% rename from apps/cookbook/docs/angular/03-glossary.md rename to apps/cookbook/docs/angular/04-glossary.md From a597c809505aa016729080fc342273e6d4057a97 Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Sun, 15 Jun 2025 16:24:22 +0200 Subject: [PATCH 2/3] =?UTF-8?q?docs(angular):=20=F0=9F=93=9D=20expand=20"w?= =?UTF-8?q?hy=20angular"=20draft=20with=20new=20sections?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/angular/01-why-angular/index.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/apps/cookbook/docs/angular/01-why-angular/index.md b/apps/cookbook/docs/angular/01-why-angular/index.md index 5c33952..f283001 100644 --- a/apps/cookbook/docs/angular/01-why-angular/index.md +++ b/apps/cookbook/docs/angular/01-why-angular/index.md @@ -4,3 +4,36 @@ draft: true --- # Why Angular? + +## Batteries Included + +## TypeScript + +## Versatility + +TODO: SPA/PWA/SSR/SSG/... + +...and even mobile + terminal. + +## Abstraction + +## Separation of Concerns + +TODO: Not like you might think. Components / Directives / Services. +(Not TypeScript / HTML / CSS) + +## Ecosystem + +## Maintainability over Hype + +TODO: Experimental => Developer Preview => Stable. + +## Testability + +## Performance + +TODO: Incremental DOM. + +## Angular Release Schedule & Long-Term Support + +TODO: link update guide From 202b86c4e5ab70ac88b1e779bef49407c0917bbe Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Mon, 16 Jun 2025 01:30:17 +0200 Subject: [PATCH 3/3] =?UTF-8?q?docs(angular):=20=F0=9F=93=9D=20enhance=20"?= =?UTF-8?q?why=20angular"=20section=20with=20detailed=20explanations=20and?= =?UTF-8?q?=20new=20subsections?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/angular/01-why-angular/index.md | 115 ++++++++++++++++-- 1 file changed, 105 insertions(+), 10 deletions(-) diff --git a/apps/cookbook/docs/angular/01-why-angular/index.md b/apps/cookbook/docs/angular/01-why-angular/index.md index f283001..5163247 100644 --- a/apps/cookbook/docs/angular/01-why-angular/index.md +++ b/apps/cookbook/docs/angular/01-why-angular/index.md @@ -7,33 +7,128 @@ draft: true ## Batteries Included +Unlike other libraries and frameworks, Angular comes with everything you need to build modern web applications right out of the box. + +- **CLI** - Command-line interface for scaffolding, building, migrating, and deploying +- **Router** +- **HTTP Client** +- **Forms** +- **Testing Utilities** +- **DevTools** +- **Internationalization (i18n)** +- **PWA Support** +- **[Angular Material](https://material.angular.dev/)** - Material Design for Angular. + +This "batteries included" approach means less hesitation, faster development, fewer compatibility issues, and a more predictable upgrade path as your application grows. + +## Opinionated + +Since its beginning, Angular has been opinionated. + +The Angular team does its best to provide a consistent way to do things. + +There are two major benefits to this: + +- **Community Consistency** - Most Angular apps share similar conventions, structure, and tools. This makes it easier to collaborate and onboard new developers. +- **Less Hesitation** - You don't have to spend time researching and evaluating different libraries and tools. This is even more important for developers who are new to the fast-moving web ecosystem. + +## Long Run over Hype + +Angular's technical choices are made with a long-term perspective in mind. + +The Angular team might make hard choices that are not popular in the short term, but they are often the right ones for the long term. + +For example, no matter which tools Angular is using internally for the build pipeline, the Angular team will avoid exposing them to the developer. While this can be frustrating for some developers, this is what allowed the community to seamlessly migrate from the old webpack-based build pipeline to the new esbuild-based build pipeline. + +## Battle-Tested + +Angular is battle-tested with thousands of applications at Google. + +:::info +All of the Angular applications at Google are using the same version of Angular which is the last commit on the `main` branch. +::: + +## Ecosystem & Community + +Angular's ecosystem and community are vast and growing. + +The Angular team also collaborates with the community and major third-party libraries such as RxJS or NgRx to ensure a consistent experience. + ## TypeScript +Angular was built with TypeScript from the ground up. + +:::info +Angular is the framework that made TypeScript popular. +::: + +Angular needed annotations to define metadata. The initial plan was to create a language called AtScript on top of TypeScript, but the Angular and TypeScript teams collaborated to bring decorators to TypeScript. + +```mermaid +flowchart LR + AtScript(AtScript) + Angular -.-> AtScript + Angular --> TypeScript + AtScript -.-> TypeScript + TypeScript --> JavaScript +``` + ## Versatility -TODO: SPA/PWA/SSR/SSG/... +Angular is a versatile framework that can be used to build a wide range of applications. -...and even mobile + terminal. +- **SPA** - Single Page Application +- **PWA** - Progressive Web Application +- **SSR** - Server-Side Rendering +- **SSG** - Static Site Generation +- **Mobile** - with NativeScript, or Ionic. +- **Terminal** - this is a bit of a stretch, but it's possible to build a terminal application with Angular by creating a custom renderer _(Cf. [Rendering Angular applications in Terminal](https://medium.com/angular-in-depth/angular-platforms-in-depth-part-3-rendering-angular-applications-in-terminal-117e4da9c0cc))_. ## Abstraction +Angular provides convenient abstractions to the native APIs that make it easier to build complex applications without having to deal with some low-level implementation details. + ## Separation of Concerns -TODO: Not like you might think. Components / Directives / Services. -(Not TypeScript / HTML / CSS) +Angular favors separation of concerns through the use of components, directives, and [Dependency Injection](../02-core-concepts/05-dependency-injection/index.md). + +:::warning +Separating TypeScript code, templates, and styles in different files is not separation of concerns. The three are highly coupled by design. +::: + +## Performance -## Ecosystem +### Incremental DOM -## Maintainability over Hype +Angular is one of the first major frameworks to come up with a compiler. In fact, Angular templates are compiled to JavaScript enabling better performance and fine-grained DOM updates. -TODO: Experimental => Developer Preview => Stable. +### Performance by Default + +Modern versions of Angular are progressively steering to a **performance by default** approach where developers can get the best performance out of the box without having to do anything special. ## Testability -## Performance +Angular is testable by design. -TODO: Incremental DOM. +It provides native test doubles for most of its building blocks such as the Router or the HTTP client. ## Angular Release Schedule & Long-Term Support -TODO: link update guide +The Angular team is committed to providing a long-term support for the framework: + +- Each major version of Angular is [supported for 18 months](https://angular.dev/reference/releases). +- Each version comes with an [update guide](https://angular.dev/update-guide) and more importantly, it also comes with many automated migrations. Without automation, Google wouldn't be able to continuously migrate its thousands of applications to the latest Angular changes from the `main` branch. + +### Experimental => Developer Preview => Stable + +Some features can go through a three-stage release process: + +- **Experimental** - The first stage of a new feature. The feature might receive breaking changes even in patch versions. The feature could also simply be removed at anytime. +- **Developer Preview** - The second stage of a new feature. While the feautre is fully functional and polished, it might receive breaking changes even in patch versions. That said, at this stage, the feature will eventually be promoted to stable. +- **Stable** - The third stage of a new feature. It is ready for production use and is stable. + +## Additional Resources + +- 📝 [**Angular Material** by Angular](https://material.angular.dev/) +- 📝 [**Angular Versioning and Releases** by Angular](https://angular.dev/reference/releases) +- 📝 [**Angular Update Guide** by Angular](https://angular.dev/update-guide)