feat(nx): upgrade nx 20 and angular 19

This commit is contained in:
thomas
2024-12-06 21:34:43 +01:00
parent bdc6d9ede4
commit f3be3eedff
143 changed files with 7652 additions and 7864 deletions

View File

@@ -6,6 +6,7 @@
{ {
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": { "rules": {
"@angular-eslint/no-host-metadata-property": "off",
"@nx/enforce-module-boundaries": [ "@nx/enforce-module-boundaries": [
"error", "error",
{ {
@@ -18,12 +19,6 @@
} }
] ]
} }
],
"@angular-eslint/no-host-metadata-property": [
"error",
{
"allowStatic": true
}
] ]
} }
}, },

View File

@@ -7,12 +7,12 @@
"tags": [], "tags": [],
"targets": { "targets": {
"build": { "build": {
"executor": "@angular-devkit/build-angular:application", "executor": "@angular-devkit/build-angular:browser",
"outputs": ["{options.outputPath}"], "outputs": ["{options.outputPath}"],
"options": { "options": {
"outputPath": "dist/apps/angular/1-projection", "outputPath": "dist/apps/angular/1-projection",
"index": "apps/angular/1-projection/src/index.html", "index": "apps/angular/1-projection/src/index.html",
"browser": "apps/angular/1-projection/src/main.ts", "main": "apps/angular/1-projection/src/main.ts",
"polyfills": ["apps/angular/1-projection/src/polyfills.ts"], "polyfills": ["apps/angular/1-projection/src/polyfills.ts"],
"tsConfig": "apps/angular/1-projection/tsconfig.app.json", "tsConfig": "apps/angular/1-projection/tsconfig.app.json",
"inlineStyleLanguage": "scss", "inlineStyleLanguage": "scss",
@@ -41,7 +41,9 @@
"outputHashing": "all" "outputHashing": "all"
}, },
"development": { "development": {
"buildOptimizer": false,
"optimization": false, "optimization": false,
"vendorChunk": true,
"extractLicenses": false, "extractLicenses": false,
"sourceMap": true, "sourceMap": true,
"namedChunks": true "namedChunks": true

View File

@@ -7,12 +7,11 @@ import { TeacherCardComponent } from './component/teacher-card/teacher-card.comp
selector: 'app-root', selector: 'app-root',
template: ` template: `
<div class="grid grid-cols-3 gap-3"> <div class="grid grid-cols-3 gap-3">
<app-teacher-card></app-teacher-card> <app-teacher-card />
<app-student-card></app-student-card> <app-student-card />
<app-city-card></app-city-card> <app-city-card />
</div> </div>
`, `,
standalone: true,
imports: [TeacherCardComponent, StudentCardComponent, CityCardComponent], imports: [TeacherCardComponent, StudentCardComponent, CityCardComponent],
}) })
export class AppComponent {} export class AppComponent {}

View File

@@ -3,7 +3,6 @@ import { Component, OnInit } from '@angular/core';
@Component({ @Component({
selector: 'app-city-card', selector: 'app-city-card',
template: 'TODO City', template: 'TODO City',
standalone: true,
imports: [], imports: [],
}) })
export class CityCardComponent implements OnInit { export class CityCardComponent implements OnInit {

View File

@@ -13,7 +13,6 @@ import { CardComponent } from '../../ui/card/card.component';
[type]="cardType" [type]="cardType"
customClass="bg-light-green"></app-card> customClass="bg-light-green"></app-card>
`, `,
standalone: true,
styles: [ styles: [
` `
::ng-deep .bg-light-green { ::ng-deep .bg-light-green {

View File

@@ -20,7 +20,6 @@ import { CardComponent } from '../../ui/card/card.component';
} }
`, `,
], ],
standalone: true,
imports: [CardComponent], imports: [CardComponent],
}) })
export class TeacherCardComponent implements OnInit { export class TeacherCardComponent implements OnInit {

View File

@@ -36,7 +36,6 @@ import { ListItemComponent } from '../list-item/list-item.component';
</button> </button>
</div> </div>
`, `,
standalone: true,
imports: [NgIf, NgFor, ListItemComponent], imports: [NgIf, NgFor, ListItemComponent],
}) })
export class CardComponent { export class CardComponent {

View File

@@ -1,4 +1,4 @@
import { bootstrapApplication } from '@angular/platform-browser'; import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component'; import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent); bootstrapApplication(AppComponent).catch((err) => console.error(err));

View File

@@ -3,7 +3,6 @@ import { Component } from '@angular/core';
import { PersonUtils } from './person.utils'; import { PersonUtils } from './person.utils';
@Component({ @Component({
standalone: true,
imports: [NgFor], imports: [NgFor],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -5,7 +5,6 @@ import { TextComponent } from './text.component';
@Component({ @Component({
selector: 'page', selector: 'page',
standalone: true,
imports: [TextStaticComponent, TextComponent], imports: [TextStaticComponent, TextComponent],
template: ` template: `
<static-text></static-text> <static-text></static-text>

View File

@@ -6,7 +6,6 @@ export type StaticTextType = 'normal' | 'warning' | 'error';
@Component({ @Component({
selector: 'static-text', selector: 'static-text',
standalone: true,
imports: [TextComponent], imports: [TextComponent],
template: ` template: `
<text [font]="font" [color]="color">This is a static text</text> <text [font]="font" [color]="color">This is a static text</text>

View File

@@ -23,7 +23,6 @@ export class ProductDirective {
} }
@Component({ @Component({
standalone: true,
imports: [TableComponent, CurrencyPipe, AsyncPipe, NgFor, ProductDirective], imports: [TableComponent, CurrencyPipe, AsyncPipe, NgFor, ProductDirective],
providers: [CurrencyService], providers: [CurrencyService],
selector: 'app-root', selector: 'app-root',

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet], imports: [RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { NavButtonComponent } from './nav-button.component'; import { NavButtonComponent } from './nav-button.component';
@Component({ @Component({
standalone: true,
imports: [NavButtonComponent], imports: [NavButtonComponent],
selector: 'app-foo', selector: 'app-foo',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { NavButtonComponent } from './nav-button.component'; import { NavButtonComponent } from './nav-button.component';
@Component({ @Component({
standalone: true,
imports: [NavButtonComponent], imports: [NavButtonComponent],
selector: 'app-home', selector: 'app-home',
template: ` template: `

View File

@@ -3,7 +3,6 @@ import { FormControl, ReactiveFormsModule } from '@angular/forms';
import { RouterLink, RouterModule } from '@angular/router'; import { RouterLink, RouterModule } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterLink, RouterModule, ReactiveFormsModule], imports: [RouterLink, RouterModule, ReactiveFormsModule],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -1,7 +1,6 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-home', selector: 'app-home',
standalone: true,
imports: [], imports: [],
template: ` template: `
<div>Home</div> <div>Home</div>

View File

@@ -5,7 +5,6 @@ import { map } from 'rxjs';
@Component({ @Component({
selector: 'app-subscription', selector: 'app-subscription',
standalone: true,
imports: [AsyncPipe], imports: [AsyncPipe],
template: ` template: `
<div>TestId: {{ testId$ | async }}</div> <div>TestId: {{ testId$ | async }}</div>

View File

@@ -6,7 +6,6 @@ interface Person {
} }
@Component({ @Component({
standalone: true,
imports: [NgFor, NgIf], imports: [NgFor, NgIf],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -25,5 +25,6 @@ import { Component } from '@angular/core';
host: { host: {
class: 'flex flex-col p-4 gap-3', class: 'flex flex-col p-4 gap-3',
}, },
standalone: false,
}) })
export class AppComponent {} export class AppComponent {}

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet], imports: [RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -10,7 +10,6 @@ interface MenuItem {
@Component({ @Component({
selector: 'app-nav', selector: 'app-nav',
standalone: true,
imports: [RouterLink, RouterLinkActive, NgFor], imports: [RouterLink, RouterLinkActive, NgFor],
template: ` template: `
<ng-container *ngFor="let menu of menus"> <ng-container *ngFor="let menu of menus">
@@ -38,7 +37,6 @@ export class NavigationComponent {
} }
@Component({ @Component({
standalone: true,
imports: [NavigationComponent, NgIf, AsyncPipe], imports: [NavigationComponent, NgIf, AsyncPipe],
template: ` template: `
<ng-container *ngIf="info$ | async as info"> <ng-container *ngIf="info$ | async as info">

View File

@@ -3,7 +3,6 @@ import { BtnHelmetDirective } from '@angular-challenges/decoupling/helmet';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: true,
imports: [BtnDisabledDirective, BtnHelmetDirective], imports: [BtnDisabledDirective, BtnHelmetDirective],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterLink, RouterOutlet } from '@angular/router'; import { RouterLink, RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet, RouterLink], imports: [RouterOutlet, RouterLink],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -3,7 +3,6 @@ import { TimerContainerComponent } from './timer-container.component';
@Component({ @Component({
selector: 'app-phone', selector: 'app-phone',
standalone: true,
imports: [TimerContainerComponent], imports: [TimerContainerComponent],
template: ` template: `
<div class="flex gap-2"> <div class="flex gap-2">

View File

@@ -3,7 +3,6 @@ import { DEFAULT_TIMER } from './data';
import { TimerComponent } from './timer.component'; import { TimerComponent } from './timer.component';
@Component({ @Component({
selector: 'timer-container', selector: 'timer-container',
standalone: true,
imports: [TimerComponent], imports: [TimerComponent],
template: ` template: `
<div class="flex gap-2"> <div class="flex gap-2">

View File

@@ -3,7 +3,6 @@ import { TimerContainerComponent } from './timer-container.component';
@Component({ @Component({
selector: 'app-video', selector: 'app-video',
standalone: true,
imports: [TimerContainerComponent], imports: [TimerContainerComponent],
template: ` template: `
<div class="flex gap-2"> <div class="flex gap-2">

View File

@@ -4,7 +4,6 @@ import { ListComponent } from './list.component';
import { PersonComponent } from './person.component'; import { PersonComponent } from './person.component';
@Component({ @Component({
standalone: true,
imports: [NgTemplateOutlet, PersonComponent, ListComponent], imports: [NgTemplateOutlet, PersonComponent, ListComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -9,7 +9,6 @@ import {
@Component({ @Component({
selector: 'list', selector: 'list',
standalone: true,
imports: [CommonModule], imports: [CommonModule],
template: ` template: `
<div *ngFor="let item of list; index as i"> <div *ngFor="let item of list; index as i">

View File

@@ -7,7 +7,6 @@ interface Person {
} }
@Component({ @Component({
standalone: true,
imports: [NgTemplateOutlet], imports: [NgTemplateOutlet],
selector: 'person', selector: 'person',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet], imports: [RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -4,7 +4,6 @@ import { ThumbnailComponent } from './thumbnail.component';
@Component({ @Component({
selector: 'blog', selector: 'blog',
standalone: true,
imports: [ThumbnailComponent], imports: [ThumbnailComponent],
template: ` template: `
<div <div

View File

@@ -3,7 +3,6 @@ import { Component, input } from '@angular/core';
@Component({ @Component({
selector: 'thumbnail-header', selector: 'thumbnail-header',
standalone: true,
imports: [NgOptimizedImage], imports: [NgOptimizedImage],
template: ` template: `
<div class="flex gap-3"> <div class="flex gap-3">

View File

@@ -6,7 +6,6 @@ import { ThumbnailHeaderComponent } from './thumbnail-header.component';
@Component({ @Component({
selector: 'blog-thumbnail', selector: 'blog-thumbnail',
standalone: true,
imports: [NgOptimizedImage, ThumbnailHeaderComponent, RouterLinkWithHref], imports: [NgOptimizedImage, ThumbnailHeaderComponent, RouterLinkWithHref],
template: ` template: `
<a [routerLink]="['post', post().id]"> <a [routerLink]="['post', post().id]">

View File

@@ -3,7 +3,6 @@ import { Component, input } from '@angular/core';
@Component({ @Component({
selector: 'post-header', selector: 'post-header',
standalone: true,
imports: [NgOptimizedImage], imports: [NgOptimizedImage],
template: ` template: `
<div class="relative"> <div class="relative">

View File

@@ -12,7 +12,6 @@ import { PostHeaderComponent } from './post-header.component';
@Component({ @Component({
selector: 'post', selector: 'post',
standalone: true,
imports: [ imports: [
ThumbnailHeaderComponent, ThumbnailHeaderComponent,
NgOptimizedImage, NgOptimizedImage,

View File

@@ -4,7 +4,6 @@ import { PostComponent } from './react/post.component';
type Post = { title: string; description: string }; type Post = { title: string; description: string };
@Component({ @Component({
standalone: true,
imports: [PostComponent], imports: [PostComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -1,7 +1,6 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: true,
imports: [], imports: [],
selector: 'app-root', selector: 'app-root',
styles: ` styles: `

View File

@@ -4,7 +4,6 @@ import { Component, OnInit } from '@angular/core';
import { randText } from '@ngneat/falso'; import { randText } from '@ngneat/falso';
@Component({ @Component({
standalone: true,
imports: [CommonModule], imports: [CommonModule],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -16,6 +16,7 @@ import { Component, signal } from '@angular/core';
} }
</div> </div>
`, `,
standalone: false,
}) })
export class AppComponent { export class AppComponent {
topLoaded = signal(false); topLoaded = signal(false);

View File

@@ -13,5 +13,6 @@ import { Component } from '@angular/core';
height: 50%; height: 50%;
} }
`, `,
standalone: false,
}) })
export class PlaceholderComponent {} export class PlaceholderComponent {}

View File

@@ -13,5 +13,6 @@ import { Component } from '@angular/core';
height: 50%; height: 50%;
} }
`, `,
standalone: false,
}) })
export class TopComponent {} export class TopComponent {}

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterLink, RouterOutlet } from '@angular/router'; import { RouterLink, RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet, RouterLink], imports: [RouterOutlet, RouterLink],
selector: 'app-root', selector: 'app-root',
templateUrl: './app.component.html', templateUrl: './app.component.html',

View File

@@ -11,7 +11,6 @@ import {
@Component({ @Component({
selector: 'app-dialog-dialog', selector: 'app-dialog-dialog',
templateUrl: './dialog.component.html', templateUrl: './dialog.component.html',
standalone: true,
imports: [ imports: [
MatButtonModule, MatButtonModule,
MatDialogActions, MatDialogActions,

View File

@@ -3,7 +3,6 @@ import { MatButtonModule } from '@angular/material/button';
import { RouterLink } from '@angular/router'; import { RouterLink } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [MatButtonModule, RouterLink], imports: [MatButtonModule, RouterLink],
selector: 'app-home', selector: 'app-home',
templateUrl: './home.component.html', templateUrl: './home.component.html',

View File

@@ -4,7 +4,6 @@ import { MatDialog } from '@angular/material/dialog';
import { DialogComponent } from '../dialog/dialog.component'; import { DialogComponent } from '../dialog/dialog.component';
@Component({ @Component({
standalone: true,
imports: [MatButtonModule], imports: [MatButtonModule],
selector: 'app-sensitive-action', selector: 'app-sensitive-action',
templateUrl: './sensitive-action.component.html', templateUrl: './sensitive-action.component.html',

View File

@@ -4,7 +4,6 @@ import { MatDialog } from '@angular/material/dialog';
import { DialogComponent } from '../dialog/dialog.component'; import { DialogComponent } from '../dialog/dialog.component';
@Component({ @Component({
standalone: true,
imports: [MatButtonModule], imports: [MatButtonModule],
selector: 'app-simple-action', selector: 'app-simple-action',
templateUrl: './simple-action.component.html', templateUrl: './simple-action.component.html',

View File

@@ -6,7 +6,8 @@
@tailwind components; @tailwind components;
@tailwind utilities; @tailwind utilities;
@include mat.core(); @include mat.elevation-classes();
@include mat.app-background();
$theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette); $theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette);
$theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400); $theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400);

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet], imports: [RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -4,7 +4,6 @@ import { ButtonComponent } from '../button.component';
@Component({ @Component({
selector: 'app-dashboard', selector: 'app-dashboard',
standalone: true,
imports: [RouterLink, ButtonComponent], imports: [RouterLink, ButtonComponent],
template: ` template: `
<p>dashboard for Admin works!</p> <p>dashboard for Admin works!</p>

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.store';
@Component({ @Component({
selector: 'app-information', selector: 'app-information',
standalone: true,
imports: [CommonModule], imports: [CommonModule],
template: ` template: `
<h2 class="mt-10 text-xl">Information Panel</h2> <h2 class="mt-10 text-xl">Information Panel</h2>

View File

@@ -14,7 +14,6 @@ import {
import { UserStore } from './user.store'; import { UserStore } from './user.store';
@Component({ @Component({
standalone: true,
imports: [InformationComponent, RouterLink, ButtonComponent], imports: [InformationComponent, RouterLink, ButtonComponent],
selector: 'app-login', selector: 'app-login',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { NgFor } from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: true,
imports: [NgFor], imports: [NgFor],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { NgFor } from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
@Component({ @Component({
standalone: true,
imports: [NgFor], imports: [NgFor],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { FeedbackFormComponent } from './feedback-form/feedback-form.component'; import { FeedbackFormComponent } from './feedback-form/feedback-form.component';
@Component({ @Component({
standalone: true,
imports: [FeedbackFormComponent], imports: [FeedbackFormComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -8,7 +8,6 @@ import {
import { RatingControlComponent } from '../rating-control/rating-control.component'; import { RatingControlComponent } from '../rating-control/rating-control.component';
@Component({ @Component({
standalone: true,
imports: [RatingControlComponent, ReactiveFormsModule], imports: [RatingControlComponent, ReactiveFormsModule],
selector: 'app-feedback-form', selector: 'app-feedback-form',
templateUrl: 'feedback-form.component.html', templateUrl: 'feedback-form.component.html',

View File

@@ -3,7 +3,6 @@ import { RouterOutlet } from '@angular/router';
import { NavComponent } from './ui/nav.component'; import { NavComponent } from './ui/nav.component';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet, NavComponent], imports: [RouterOutlet, NavComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';
import { FormComponent } from '../ui/form.component'; import { FormComponent } from '../ui/form.component';
@Component({ @Component({
standalone: true,
imports: [FormComponent], imports: [FormComponent],
template: ` template: `
<section class="mx-auto max-w-screen-sm"> <section class="mx-auto max-w-screen-sm">

View File

@@ -3,7 +3,6 @@ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
@Component({ @Component({
selector: 'app-form', selector: 'app-form',
standalone: true,
imports: [ReactiveFormsModule], imports: [ReactiveFormsModule],
template: ` template: `
<form [formGroup]="form" (ngSubmit)="onSubmit()" class="space-y-4"> <form [formGroup]="form" (ngSubmit)="onSubmit()" class="space-y-4">

View File

@@ -3,7 +3,6 @@ import { RouterLink, RouterLinkActive } from '@angular/router';
@Component({ @Component({
selector: 'app-nav', selector: 'app-nav',
standalone: true,
imports: [RouterLink, RouterLinkActive], imports: [RouterLink, RouterLinkActive],
template: ` template: `
<nav <nav

View File

@@ -15,7 +15,6 @@ import { loadUsers } from './store/user/user.actions';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
standalone: true,
imports: [NgFor, AsyncPipe], imports: [NgFor, AsyncPipe],
template: ` template: `
<h1>Activity Board</h1> <h1>Activity Board</h1>

View File

@@ -4,7 +4,6 @@ import { Store } from '@ngrx/store';
import { appActions } from './app.actions'; import { appActions } from './app.actions';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet, RouterLink], imports: [RouterOutlet, RouterLink],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -1,5 +1,9 @@
import { FakeBackendService } from '@angular-challenges/power-of-effect/backend'; import { FakeBackendService } from '@angular-challenges/power-of-effect/backend';
import { APP_INITIALIZER, ApplicationConfig, inject } from '@angular/core'; import {
ApplicationConfig,
inject,
provideAppInitializer,
} from '@angular/core';
import { provideAnimations } from '@angular/platform-browser/animations'; import { provideAnimations } from '@angular/platform-browser/animations';
import { provideRouter } from '@angular/router'; import { provideRouter } from '@angular/router';
import { provideEffects } from '@ngrx/effects'; import { provideEffects } from '@ngrx/effects';
@@ -27,22 +31,20 @@ export const appConfig: ApplicationConfig = {
provideStore(REDUCERS), provideStore(REDUCERS),
provideEffects([TeacherEffects, StudentEffects]), provideEffects([TeacherEffects, StudentEffects]),
provideRouter(ROUTES), provideRouter(ROUTES),
{ provideAppInitializer(() => {
provide: APP_INITIALIZER, const initializerFn = (() => {
multi: true,
useFactory: () => {
const service = inject(FakeBackendService); const service = inject(FakeBackendService);
return () => service.start(); return () => service.start();
}, })();
}, return initializerFn();
{ }),
provide: APP_INITIALIZER, provideAppInitializer(() => {
multi: true, const initializerFn = (() => {
useFactory: () => {
const service = inject(NotificationService); const service = inject(NotificationService);
return () => service.init(); return () => service.init();
}, })();
}, return initializerFn();
}),
provideAnimations(), provideAnimations(),
], ],
}; };

View File

@@ -5,7 +5,6 @@ import { provideComponentStore } from '@ngrx/component-store';
import { SchoolStore } from './school.store'; import { SchoolStore } from './school.store';
@Component({ @Component({
standalone: true,
imports: [NgFor, AsyncPipe], imports: [NgFor, AsyncPipe],
providers: [provideComponentStore(SchoolStore)], providers: [provideComponentStore(SchoolStore)],
selector: 'school', selector: 'school',

View File

@@ -5,7 +5,6 @@ import { Store } from '@ngrx/store';
import { StudentSelectors } from './store/student.selectors'; import { StudentSelectors } from './store/student.selectors';
@Component({ @Component({
standalone: true,
imports: [NgFor, AsyncPipe], imports: [NgFor, AsyncPipe],
selector: 'student', selector: 'student',
template: ` template: `

View File

@@ -5,7 +5,6 @@ import { Store } from '@ngrx/store';
import { TeacherSelectors } from './store/teacher.selectors'; import { TeacherSelectors } from './store/teacher.selectors';
@Component({ @Component({
standalone: true,
imports: [NgFor, AsyncPipe], imports: [NgFor, AsyncPipe],
selector: 'teacher', selector: 'teacher',
template: ` template: `

View File

@@ -6,7 +6,6 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [UserComponent, RouterOutlet], imports: [UserComponent, RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -3,7 +3,6 @@ import { Component, HostListener } from '@angular/core';
import { BehaviorSubject } from 'rxjs'; import { BehaviorSubject } from 'rxjs';
@Component({ @Component({
standalone: true,
imports: [NgIf, AsyncPipe], imports: [NgIf, AsyncPipe],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -4,7 +4,6 @@ import { PersonListComponent } from './person-list.component';
import { RandomComponent } from './random.component'; import { RandomComponent } from './random.component';
@Component({ @Component({
standalone: true,
imports: [PersonListComponent, RandomComponent], imports: [PersonListComponent, RandomComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -10,7 +10,6 @@ import { MatListModule } from '@angular/material/list';
@Component({ @Component({
selector: 'app-person-list', selector: 'app-person-list',
standalone: true,
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,

View File

@@ -3,7 +3,6 @@ import { Component } from '@angular/core';
@Component({ @Component({
selector: 'app-random', selector: 'app-random',
standalone: true,
template: ` template: `
<div cd-flash>I do nothing but I'm here</div> <div cd-flash>I do nothing but I'm here</div>
`, `,

View File

@@ -4,7 +4,6 @@ import { generateList } from './generateList';
import { PersonListComponent } from './person-list.component'; import { PersonListComponent } from './person-list.component';
@Component({ @Component({
standalone: true,
imports: [PersonListComponent, NgIf], imports: [PersonListComponent, NgIf],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -17,7 +17,6 @@ const fibonacci = (num: number): number => {
@Component({ @Component({
selector: 'app-person-list', selector: 'app-person-list',
standalone: true,
imports: [ imports: [
CommonModule, CommonModule,
FormsModule, FormsModule,

View File

@@ -6,7 +6,6 @@ import { PersonService } from './list.service';
import { PersonListComponent } from './person-list.component'; import { PersonListComponent } from './person-list.component';
@Component({ @Component({
standalone: true,
imports: [ imports: [
PersonListComponent, PersonListComponent,
FormsModule, FormsModule,

View File

@@ -5,7 +5,6 @@ import { Person } from './person.model';
@Component({ @Component({
selector: 'app-person-list', selector: 'app-person-list',
standalone: true,
imports: [CommonModule], imports: [CommonModule],
template: ` template: `
<div <div

View File

@@ -8,7 +8,6 @@ import { PersonService } from './list.service';
import { PersonListComponent } from './person-list.component'; import { PersonListComponent } from './person-list.component';
@Component({ @Component({
standalone: true,
imports: [ imports: [
NgIf, NgIf,
PersonListComponent, PersonListComponent,

View File

@@ -6,7 +6,6 @@ import { Person } from './person.model';
@Component({ @Component({
selector: 'app-person-list', selector: 'app-person-list',
standalone: true,
imports: [CommonModule, NgForTrackByModule], imports: [CommonModule, NgForTrackByModule],
template: ` template: `
<div class="relative h-[300px] overflow-hidden"> <div class="relative h-[300px] overflow-hidden">

View File

@@ -4,7 +4,6 @@ import { HeavyCalculationService } from './heavy-calculation.service';
import { UnknownPersonComponent } from './unknown-person/unknown-person.component'; import { UnknownPersonComponent } from './unknown-person/unknown-person.component';
@Component({ @Component({
standalone: true,
imports: [CommonModule, UnknownPersonComponent], imports: [CommonModule, UnknownPersonComponent],
providers: [HeavyCalculationService], providers: [HeavyCalculationService],
selector: 'app-root', selector: 'app-root',

View File

@@ -6,7 +6,6 @@ import { AppService } from './app.service';
import { TopicType } from './localDB.service'; import { TopicType } from './localDB.service';
@Component({ @Component({
standalone: true,
selector: 'button-delete-topic', selector: 'button-delete-topic',
imports: [AsyncPipe], imports: [AsyncPipe],
template: ` template: `
@@ -36,7 +35,6 @@ export class ButtonDeleteComponent {
} }
@Component({ @Component({
standalone: true,
imports: [AsyncPipe, NgFor, ButtonDeleteComponent], imports: [AsyncPipe, NgFor, ButtonDeleteComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -18,7 +18,6 @@ import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
</div> </div>
`, `,
imports: [MatDialogModule, MatButtonModule, NgFor], imports: [MatDialogModule, MatButtonModule, NgFor],
standalone: true,
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class TopicModalComponent { export class TopicModalComponent {

View File

@@ -2,7 +2,8 @@
@use '@angular/material' as mat; @use '@angular/material' as mat;
@include mat.core(); @include mat.elevation-classes();
@include mat.app-background();
$theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette); $theme-primary: mat.m2-define-palette(mat.$m2-indigo-palette);
$theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400); $theme-accent: mat.m2-define-palette(mat.$m2-pink-palette, A200, A100, A400);

View File

@@ -6,7 +6,6 @@ import { FormsModule } from '@angular/forms';
import { Subject, concatMap, map } from 'rxjs'; import { Subject, concatMap, map } from 'rxjs';
@Component({ @Component({
standalone: true,
imports: [CommonModule, FormsModule], imports: [CommonModule, FormsModule],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -1,7 +1,6 @@
import { ChangeDetectionStrategy, Component } from '@angular/core'; import { ChangeDetectionStrategy, Component } from '@angular/core';
@Component({ @Component({
standalone: true,
imports: [], imports: [],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -2,7 +2,6 @@ import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router'; import { RouterOutlet } from '@angular/router';
@Component({ @Component({
standalone: true,
imports: [RouterOutlet], imports: [RouterOutlet],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -5,7 +5,6 @@ import { Photo } from '../photo.model';
@Component({ @Component({
selector: 'app-photos', selector: 'app-photos',
standalone: true,
imports: [DatePipe, RouterLink], imports: [DatePipe, RouterLink],
template: ` template: `
<img src="{{ photo.url_m }}" alt="{{ photo.title }}" class="image" /> <img src="{{ photo.url_m }}" alt="{{ photo.title }}" class="image" />

View File

@@ -13,7 +13,6 @@ import { PhotoStore } from './photos.store';
@Component({ @Component({
selector: 'app-photos', selector: 'app-photos',
standalone: true,
imports: [ imports: [
ReactiveFormsModule, ReactiveFormsModule,
MatFormFieldModule, MatFormFieldModule,

View File

@@ -1,10 +1,10 @@
import { Injectable, inject } from '@angular/core'; import { inject, Injectable } from '@angular/core';
import { import {
ComponentStore, ComponentStore,
OnStateInit, OnStateInit,
OnStoreInit, OnStoreInit,
tapResponse,
} from '@ngrx/component-store'; } from '@ngrx/component-store';
import { tapResponse } from '@ngrx/operators';
import { pipe } from 'rxjs'; import { pipe } from 'rxjs';
import { filter, mergeMap, tap } from 'rxjs/operators'; import { filter, mergeMap, tap } from 'rxjs/operators';
import { Photo } from '../photo.model'; import { Photo } from '../photo.model';

View File

@@ -1,10 +1,8 @@
import { JsonPipe } from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { UserComponent } from './user.component'; import { UserComponent } from './user.component';
@Component({ @Component({
standalone: true, imports: [UserComponent],
imports: [UserComponent, JsonPipe],
selector: 'app-root', selector: 'app-root',
template: ` template: `
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">

View File

@@ -16,7 +16,6 @@ const ageToCategory = (age: number): Category => {
@Component({ @Component({
selector: 'app-user', selector: 'app-user',
standalone: true,
imports: [TitleCasePipe], imports: [TitleCasePipe],
template: ` template: `
{{ fullName | titlecase }} plays tennis in the {{ category }} category!! {{ fullName | titlecase }} plays tennis in the {{ category }} category!!

View File

@@ -7,7 +7,6 @@ import {
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
@Component({ @Component({
standalone: true,
imports: [FormsModule], imports: [FormsModule],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -9,7 +9,6 @@ import { FormsModule } from '@angular/forms';
import { UserService } from './user.service'; import { UserService } from './user.service';
@Component({ @Component({
standalone: true,
imports: [FormsModule], imports: [FormsModule],
selector: 'app-actions', selector: 'app-actions',
template: ` template: `

View File

@@ -4,7 +4,6 @@ import { ActionsComponent } from './action.component';
import { UserService } from './user.service'; import { UserService } from './user.service';
@Component({ @Component({
standalone: true,
imports: [FormsModule, ActionsComponent], imports: [FormsModule, ActionsComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.service';
@Component({ @Component({
selector: 'address-user', selector: 'address-user',
standalone: true,
template: ` template: `
<div cd-flash class="m-4 block border border-gray-500 p-4"> <div cd-flash class="m-4 block border border-gray-500 p-4">
Address: Address:

View File

@@ -6,7 +6,6 @@ import { NoteComponent } from './note.component';
import { UserFormComponent } from './user-form.component'; import { UserFormComponent } from './user-form.component';
@Component({ @Component({
standalone: true,
selector: 'app-root', selector: 'app-root',
template: ` template: `
<name /> <name />

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.service';
@Component({ @Component({
selector: 'job', selector: 'job',
standalone: true,
template: ` template: `
<div cd-flash class="m-4 block border border-gray-500 p-4"> <div cd-flash class="m-4 block border border-gray-500 p-4">
Job: Job:

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.service';
@Component({ @Component({
selector: 'name', selector: 'name',
standalone: true,
template: ` template: `
<div cd-flash class="m-4 block border border-gray-500 p-4"> <div cd-flash class="m-4 block border border-gray-500 p-4">
Name: {{ userService.user().name }} Name: {{ userService.user().name }}

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.service';
@Component({ @Component({
selector: 'note', selector: 'note',
standalone: true,
template: ` template: `
<div cd-flash class="m-4 block border border-gray-500 p-4"> <div cd-flash class="m-4 block border border-gray-500 p-4">
Note: {{ userService.user().note }} Note: {{ userService.user().note }}

View File

@@ -4,7 +4,6 @@ import { UserStore } from './user.service';
@Component({ @Component({
selector: 'user-form', selector: 'user-form',
standalone: true,
imports: [ReactiveFormsModule], imports: [ReactiveFormsModule],
template: ` template: `
<form [formGroup]="form" (ngSubmit)="submit()" class="flex flex-col gap-4"> <form [formGroup]="form" (ngSubmit)="submit()" class="flex flex-col gap-4">

View File

@@ -4,7 +4,6 @@ import { ProductRowComponent } from './product-row.component';
import { products } from './product.model'; import { products } from './product.model';
@Component({ @Component({
standalone: true,
imports: [TableComponent, ProductRowComponent], imports: [TableComponent, ProductRowComponent],
selector: 'app-root', selector: 'app-root',
template: ` template: `

View File

@@ -10,7 +10,6 @@ import { CurrencyService } from './currency.service';
import { Product } from './product.model'; import { Product } from './product.model';
@Component({ @Component({
standalone: true,
selector: 'tr[product-row]', selector: 'tr[product-row]',
template: ` template: `
<td>{{ productInfo.name }}</td> <td>{{ productInfo.name }}</td>

Some files were not shown because too many files have changed in this diff Show More