From 98d1edce15b017908e9ede97a9eb481f77956f59 Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Wed, 11 Mar 2026 10:41:47 +0100 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=F0=9F=90=9E=20resurrect=20material?= =?UTF-8?q?=20recipe=20filter=20form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/recipe/recipe-filter.ng.ts | 50 +++++++++------ .../src/app/recipe/recipe-filter.ng.ts | 1 - .../src/app/recipe/recipe-filter.ng.ts | 1 - .../src/app/recipe/recipe-filter.ng.ts | 1 - .../src/app/recipe/recipe-filter.ng.ts | 1 - .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 1 - .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- ...Search-shows-recipes-1-chromium-darwin.png | Bin 12906 -> 12979 bytes .../src/app/recipe/recipe-filter.ng.ts | 57 +++++++++++------- 16 files changed, 336 insertions(+), 232 deletions(-) diff --git a/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts b/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..384b537 100644 --- a/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,28 +10,36 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [FormField, FormRoot, MatFormFieldModule, MatInput], template: `
- - - + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` diff --git a/apps/402-recipe-search-filter-interaction-solution/src/app/recipe/recipe-filter.ng.ts b/apps/402-recipe-search-filter-interaction-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..8bf0e7b 100644 --- a/apps/402-recipe-search-filter-interaction-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/402-recipe-search-filter-interaction-solution/src/app/recipe/recipe-filter.ng.ts @@ -20,7 +20,6 @@ import { diff --git a/apps/402-recipe-search-filter-interaction-starter/src/app/recipe/recipe-filter.ng.ts b/apps/402-recipe-search-filter-interaction-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..8bf0e7b 100644 --- a/apps/402-recipe-search-filter-interaction-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/402-recipe-search-filter-interaction-starter/src/app/recipe/recipe-filter.ng.ts @@ -20,7 +20,6 @@ import { diff --git a/apps/403-recipe-search-add-button-solution/src/app/recipe/recipe-filter.ng.ts b/apps/403-recipe-search-add-button-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..8bf0e7b 100644 --- a/apps/403-recipe-search-add-button-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/403-recipe-search-add-button-solution/src/app/recipe/recipe-filter.ng.ts @@ -20,7 +20,6 @@ import { diff --git a/apps/403-recipe-search-add-button-starter/src/app/recipe/recipe-filter.ng.ts b/apps/403-recipe-search-add-button-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..8bf0e7b 100644 --- a/apps/403-recipe-search-add-button-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/403-recipe-search-add-button-starter/src/app/recipe/recipe-filter.ng.ts @@ -20,7 +20,6 @@ import { diff --git a/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts b/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/404-recipe-filter-material-starter/src/app/recipe/recipe-filter.ng.ts b/apps/404-recipe-filter-material-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..8bf0e7b 100644 --- a/apps/404-recipe-filter-material-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/404-recipe-filter-material-starter/src/app/recipe/recipe-filter.ng.ts @@ -20,7 +20,6 @@ import { diff --git a/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) diff --git a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-search.pw.ts-snapshots/RecipeSearch-shows-recipes-1-chromium-darwin.png b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-search.pw.ts-snapshots/RecipeSearch-shows-recipes-1-chromium-darwin.png index 2df3f9b587e0dd4fd8107e110efe3c1eee51c1ee..10a17f3c5ef05b76092b7c1b9d338de6a0f29437 100644 GIT binary patch literal 12979 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 literal 12906 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 diff --git a/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts b/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts index 7611251..72a9c72 100644 --- a/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,5 +1,8 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -8,33 +11,41 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot], + imports: [ + FormField, + FormRoot, + MatFormFieldModule, + MatInputModule, + ReactiveFormsModule, + ], template: ` -
- - - + + + Keywords + + + + Max Ingredients + + + + Max Steps + +
`, styles: ` - :host { - text-align: center; + .filter-form { + display: flex; + flex-wrap: wrap; + gap: 1rem; + justify-content: center; + + margin-top: 1rem; } `, }) From 40c2073b97f6159df5035aa2728a299aad4c333f Mon Sep 17 00:00:00 2001 From: Marmicode Bot Date: Wed, 11 Mar 2026 09:53:53 +0000 Subject: [PATCH 2/3] =?UTF-8?q?test:=20=E2=9C=85=20update=20snapshots?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...eSearch-shows-recipes-1-chromium-linux.png | Bin 11429 -> 11499 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-search.pw.ts-snapshots/RecipeSearch-shows-recipes-1-chromium-linux.png b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-search.pw.ts-snapshots/RecipeSearch-shows-recipes-1-chromium-linux.png index dd937c1b95d92f9f9c3f93b22050fe2c3e02f507..510d939ca213c95ae0c07d7ef490c3813a32b638 100644 GIT binary patch literal 11499 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 delta 7739 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 Qz$*}QQ|s&aYi^JK55Z?yh5!Hn From ff6e35b05dfd851ec68d3200833876de39f91460 Mon Sep 17 00:00:00 2001 From: Younes Jaaidi Date: Wed, 11 Mar 2026 11:01:54 +0100 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=F0=9F=9B=A0=EF=B8=8F=20propaga?= =?UTF-8?q?te=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/recipe/recipe-filter.ng.ts | 49 +++++++------------ .../src/app/recipe/recipe-filter.ng.ts | 9 ++-- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- .../src/app/recipe/recipe-filter.ng.ts | 13 ++--- 11 files changed, 52 insertions(+), 123 deletions(-) diff --git a/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts b/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts index 384b537..8bf0e7b 100644 --- a/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/401-recipe-filter-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,7 +1,5 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -10,36 +8,27 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [FormField, FormRoot, MatFormFieldModule, MatInput], + imports: [FormField, FormRoot], template: `
- - Keywords - - - - Max Ingredients - - - - Max Steps - - + + +
`, styles: ` diff --git a/apps/401-recipe-filter-starter/src/app/recipe/recipe-filter.ng.ts b/apps/401-recipe-filter-starter/src/app/recipe/recipe-filter.ng.ts index 2598b38..7bb55d1 100644 --- a/apps/401-recipe-filter-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/401-recipe-filter-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,6 +1,9 @@ -import { ChangeDetectionStrategy, Component, output } from '@angular/core'; +import { ChangeDetectionStrategy, Component, model } from '@angular/core'; import { FormField, FormRoot } from '@angular/forms/signals'; -import { RecipeFilterCriteria } from './recipe-filter-criteria'; +import { + createDefaultRecipeFilterCriteria, + RecipeFilterCriteria, +} from './recipe-filter-criteria'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, @@ -9,5 +12,5 @@ import { RecipeFilterCriteria } from './recipe-filter-criteria'; template: ` <🚧 wm-recipe-filter> `, }) export class RecipeFilter { - filterChange = output(); + filter = model(createDefaultRecipeFilterCriteria()); } diff --git a/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts b/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/404-recipe-filter-material-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: `
diff --git a/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/501-recipe-preview-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/501-recipe-preview-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/502-recipe-filter-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/502-recipe-filter-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts b/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/503-recipe-search-testronaut-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts b/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/503-recipe-search-testronaut-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts +++ b/apps/504-playwright-visual-regression-testing-solution/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: ` diff --git a/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts b/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts index 72a9c72..a442f6b 100644 --- a/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts +++ b/apps/504-playwright-visual-regression-testing-starter/src/app/recipe/recipe-filter.ng.ts @@ -1,8 +1,7 @@ import { ChangeDetectionStrategy, Component, model } from '@angular/core'; -import { ReactiveFormsModule } from '@angular/forms'; import { form, FormField, FormRoot } from '@angular/forms/signals'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatInputModule } from '@angular/material/input'; +import { MatFormField, MatLabel } from '@angular/material/form-field'; +import { MatInput } from '@angular/material/input'; import { createDefaultRecipeFilterCriteria, RecipeFilterCriteria, @@ -11,13 +10,7 @@ import { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'wm-recipe-filter', - imports: [ - FormField, - FormRoot, - MatFormFieldModule, - MatInputModule, - ReactiveFormsModule, - ], + imports: [FormField, FormRoot, MatFormField, MatInput, MatLabel], template: `