From 40dab73dd56d7d3265795b7456754d69970b4424 Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Thu, 13 Jan 2022 14:05:16 +0100 Subject: [PATCH 01/10] note szkielet --- .../note-form/note-form.component.html" | 1 + .../note-form/note-form.component.ts" | 53 +++++++++++++++++++ .../note.component.html" | 21 ++++++++ .../note.component.ts" | 45 ++++++++++++++++ .../note/note-form/note-form.component.html | 1 + src/app/note/note-form/note-form.component.ts | 53 +++++++++++++++++++ src/app/note/note.component.html | 21 ++++++++ src/app/note/note.component.ts | 45 ++++++++++++++++ src/app/shared/note.model.ts | 6 +++ src/app/shared/note.service.ts | 34 ++++++++++++ 10 files changed, 280 insertions(+) create mode 100644 "src/app/note \342\200\224 kopia/note-form/note-form.component.html" create mode 100644 "src/app/note \342\200\224 kopia/note-form/note-form.component.ts" create mode 100644 "src/app/note \342\200\224 kopia/note.component.html" create mode 100644 "src/app/note \342\200\224 kopia/note.component.ts" create mode 100644 src/app/note/note-form/note-form.component.html create mode 100644 src/app/note/note-form/note-form.component.ts create mode 100644 src/app/note/note.component.html create mode 100644 src/app/note/note.component.ts create mode 100644 src/app/shared/note.model.ts create mode 100644 src/app/shared/note.service.ts diff --git "a/src/app/note \342\200\224 kopia/note-form/note-form.component.html" "b/src/app/note \342\200\224 kopia/note-form/note-form.component.html" new file mode 100644 index 0000000..eefe3b7 --- /dev/null +++ "b/src/app/note \342\200\224 kopia/note-form/note-form.component.html" @@ -0,0 +1 @@ +

here you will find form to add a new note

\ No newline at end of file diff --git "a/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" "b/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" new file mode 100644 index 0000000..994b4cf --- /dev/null +++ "b/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" @@ -0,0 +1,53 @@ +import { ToastrService } from 'ngx-toastr'; +import { NoteService } from './../../shared/note.service'; +import { Component, OnInit } from '@angular/core'; +import { NgForm } from '@angular/forms'; +import { Note } from '../../shared/note.model'; + +@Component({ + selector: 'app-note-form', + templateUrl: './note-form.component.html', + styles: [ + ] +}) +export class NoteFormComponent implements OnInit { + + constructor(public service:NoteService, + private toastr:ToastrService) { } + + ngOnInit(): void { + } + + onSubmit(form:NgForm){ + if(this.service.formData.noteId==0) this.insertRecord(form); + else + this.updateRecord(form); + } + + insertRecord(form:NgForm){ + this.service.postNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.success('Added successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + updateRecord(form: NgForm){ + this.service.putNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.info('Updated successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + resetForm(form:NgForm){ + form.form.reset(); + this.service.formData = new Note(); + } +} diff --git "a/src/app/note \342\200\224 kopia/note.component.html" "b/src/app/note \342\200\224 kopia/note.component.html" new file mode 100644 index 0000000..12def4c --- /dev/null +++ "b/src/app/note \342\200\224 kopia/note.component.html" @@ -0,0 +1,21 @@ +Add new note + + + + + + + + + + + + + + + + + +
TitleAuthorYour thoughts
{{note.bookId}}{{note.comment}} + +
diff --git "a/src/app/note \342\200\224 kopia/note.component.ts" "b/src/app/note \342\200\224 kopia/note.component.ts" new file mode 100644 index 0000000..560deed --- /dev/null +++ "b/src/app/note \342\200\224 kopia/note.component.ts" @@ -0,0 +1,45 @@ +import { ToastrService } from 'ngx-toastr'; +import { Component, OnInit } from "@angular/core"; +import { NgForm } from '@angular/forms'; +import { Note } from 'app/shared/note.model'; +import { NoteService } from 'app/shared/note.service'; +import { Book } from 'app/shared/book.model'; +import { BookService } from 'app/shared/book.service'; +import { UserService } from 'app/shared/user.service'; + + +@Component({ + selector: 'app-note', + templateUrl: './note.component.html', + styles: [ + + ] +}) + +export class NoteComponent implements OnInit { + + constructor(public service: NoteService, + private toastr:ToastrService) { } + + ngOnInit(): void { + this.service.refreshList(); + } + + populateForm(selectedRecord:Note){ + this.service.formData = Object.assign({},selectedRecord) ; + } + + onDelete(id:number){ + if(confirm('Are you sure to delete this note?')) + { + this.service.deleteNote(id) + .subscribe( + res=>{ + this.service.refreshList(); + this.toastr.error("Deleted successfully","Note delete") + }, + err=>{console.log(err)} + ) + } + } +} diff --git a/src/app/note/note-form/note-form.component.html b/src/app/note/note-form/note-form.component.html new file mode 100644 index 0000000..eefe3b7 --- /dev/null +++ b/src/app/note/note-form/note-form.component.html @@ -0,0 +1 @@ +

here you will find form to add a new note

\ No newline at end of file diff --git a/src/app/note/note-form/note-form.component.ts b/src/app/note/note-form/note-form.component.ts new file mode 100644 index 0000000..994b4cf --- /dev/null +++ b/src/app/note/note-form/note-form.component.ts @@ -0,0 +1,53 @@ +import { ToastrService } from 'ngx-toastr'; +import { NoteService } from './../../shared/note.service'; +import { Component, OnInit } from '@angular/core'; +import { NgForm } from '@angular/forms'; +import { Note } from '../../shared/note.model'; + +@Component({ + selector: 'app-note-form', + templateUrl: './note-form.component.html', + styles: [ + ] +}) +export class NoteFormComponent implements OnInit { + + constructor(public service:NoteService, + private toastr:ToastrService) { } + + ngOnInit(): void { + } + + onSubmit(form:NgForm){ + if(this.service.formData.noteId==0) this.insertRecord(form); + else + this.updateRecord(form); + } + + insertRecord(form:NgForm){ + this.service.postNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.success('Added successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + updateRecord(form: NgForm){ + this.service.putNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.info('Updated successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + resetForm(form:NgForm){ + form.form.reset(); + this.service.formData = new Note(); + } +} diff --git a/src/app/note/note.component.html b/src/app/note/note.component.html new file mode 100644 index 0000000..12def4c --- /dev/null +++ b/src/app/note/note.component.html @@ -0,0 +1,21 @@ +Add new note + + + + + + + + + + + + + + + + + +
TitleAuthorYour thoughts
{{note.bookId}}{{note.comment}} + +
diff --git a/src/app/note/note.component.ts b/src/app/note/note.component.ts new file mode 100644 index 0000000..560deed --- /dev/null +++ b/src/app/note/note.component.ts @@ -0,0 +1,45 @@ +import { ToastrService } from 'ngx-toastr'; +import { Component, OnInit } from "@angular/core"; +import { NgForm } from '@angular/forms'; +import { Note } from 'app/shared/note.model'; +import { NoteService } from 'app/shared/note.service'; +import { Book } from 'app/shared/book.model'; +import { BookService } from 'app/shared/book.service'; +import { UserService } from 'app/shared/user.service'; + + +@Component({ + selector: 'app-note', + templateUrl: './note.component.html', + styles: [ + + ] +}) + +export class NoteComponent implements OnInit { + + constructor(public service: NoteService, + private toastr:ToastrService) { } + + ngOnInit(): void { + this.service.refreshList(); + } + + populateForm(selectedRecord:Note){ + this.service.formData = Object.assign({},selectedRecord) ; + } + + onDelete(id:number){ + if(confirm('Are you sure to delete this note?')) + { + this.service.deleteNote(id) + .subscribe( + res=>{ + this.service.refreshList(); + this.toastr.error("Deleted successfully","Note delete") + }, + err=>{console.log(err)} + ) + } + } +} diff --git a/src/app/shared/note.model.ts b/src/app/shared/note.model.ts new file mode 100644 index 0000000..f2e86cc --- /dev/null +++ b/src/app/shared/note.model.ts @@ -0,0 +1,6 @@ +export class Note { + noteId:number=0; + userId:number=0; + bookId:number=0; + comment:string=""; +} \ No newline at end of file diff --git a/src/app/shared/note.service.ts b/src/app/shared/note.service.ts new file mode 100644 index 0000000..fcfbcaf --- /dev/null +++ b/src/app/shared/note.service.ts @@ -0,0 +1,34 @@ +import { Note } from './note.model'; +import { Injectable } from '@angular/core'; +import { HttpClient} from "@angular/common/http" + +@Injectable({ + providedIn: 'root' +}) +export class NoteService { + + constructor(private http: HttpClient) { } + + formData: Note = new Note(); + readonly baseURL = `https://localhost:44340/api/Note`; + + list: Note[]; + + postNote(){ + return this.http.post(this.baseURL,this.formData); + } + + putNote(){ + return this.http.put(`${this.baseURL}/${this.formData.noteId}`,this.formData); + } + + deleteNote(id:number){ + return this.http.delete(`${this.baseURL}/${id}`); + } + + refreshList(){ + this.http.get(this.baseURL) + .toPromise() + .then(res => this.list = res as Note[]); + } +} \ No newline at end of file From 651887d44685b142aa8ac077baad52ac76c9372f Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Thu, 13 Jan 2022 14:05:29 +0100 Subject: [PATCH 02/10] home page update --- src/app/app.component.html | 16 ++++++++++++++++ src/app/home/home.component.html | 0 src/app/home/home.component.ts | 13 +++++++++++++ src/styles.css | 25 ++++++++++++++++++++----- 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 src/app/home/home.component.html create mode 100644 src/app/home/home.component.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index d14cb93..87f2b56 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,3 +1,19 @@
+
\ No newline at end of file diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..87c3da8 --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,13 @@ +import { Component } from "@angular/core"; + +@Component({ + selector: 'app-note', + templateUrl: './home.component.html', + styles: [ + + ] +}) + +export class HomeComponent { + +} \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index a975633..13ce1f4 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,6 +1,13 @@ /* You can add global styles to this file, and also import other style files */ +:root{ + --main-color: rgb(233, 156, 84); + --text-color: rgb(48, 48, 48); + --label-color: black; + --input-color: rgb(53, 52, 52); + --button-color: black; +} .form-group label { - color: grey; + color: var(--label-color); } .form-group input { @@ -8,7 +15,7 @@ } .form-group input::placeholder { - color: #c0bdbd; + color: var(--input-color); font-weight: 300; } @@ -26,11 +33,12 @@ input.invalid { } body{ - background-color: #ffc107; + background-color: var(--main-color); + color: var(--text-color); } input.form-control, input.forom-control:focus{ - background-color: #ffc107; + background-color: var(--main-color); color: black; border-color: black; border-radius: 0px; @@ -39,8 +47,11 @@ input.form-control, input.forom-control:focus{ button[type=submit].btn{ border-radius: 20px; - background-color: #000; + background-color: var(--button-color); color: #fff; + border-color: var(--button-color); + margin-top: 10px; + opacity: 1; } .div.form-group.required>label:first-child::after{ @@ -59,4 +70,8 @@ form{ .div.side header{ border: 3px solid black; +} + +.bg-transparent{ + background-color: transparent; } \ No newline at end of file From 7cc224b224dc35096674ff2dca78751917370c53 Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Thu, 13 Jan 2022 14:05:47 +0100 Subject: [PATCH 03/10] daga zmiany nwm czy nie zepsuje --- angular.json | 3 + package-lock.json | 917 ++++++++++++++++++++++++---------------------- 2 files changed, 473 insertions(+), 447 deletions(-) diff --git a/angular.json b/angular.json index 9eca6b2..b1bcb73 100644 --- a/angular.json +++ b/angular.json @@ -1,5 +1,8 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, "version": 1, "newProjectRoot": "projects", "projects": { diff --git a/package-lock.json b/package-lock.json index c921f8a..7b4dc11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,12 +50,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.2.tgz", - "integrity": "sha512-v8e6OF80Ezo5MTHtFcq1AZJH+Wq+hN9pMZ1iLGkODIfKIW9zx6aPhx0JY0b7sZkfNVL8ay8JA8f339eBMnOE9A==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.3.tgz", + "integrity": "sha512-fFSevgYGZHCybYoyTkZ9b1YCSthBmoi77alwWjqMhYXUNXx7yx50zJZ6Ur2v3YpctVjU6eoGc5FDFyVHwXT0Iw==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "rxjs": "6.6.7" }, "engines": { @@ -83,15 +83,15 @@ "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.2.tgz", - "integrity": "sha512-0FeDqfjWJjgIU42T3136RNYb7Yv2as6Z8rAnfUlX6RjRGZf98+6ZQZ80yREgrLkm7L8G1qWJc1sn3NyVMDwf9A==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.3.tgz", + "integrity": "sha512-C5Qv8aGmpGbETG4Mawly/5LnkRwfJAzANL5BtYJn8ZaDlZKCkhvAaRXHpm4Mdqg5idACAT8hgYqPQvqyEBaVDA==", "dev": true, "dependencies": { "@ampproject/remapping": "1.0.2", - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/build-webpack": "0.1301.2", - "@angular-devkit/core": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/build-webpack": "0.1301.3", + "@angular-devkit/core": "13.1.3", "@babel/core": "7.16.0", "@babel/generator": "7.16.0", "@babel/helper-annotate-as-pure": "7.16.0", @@ -102,7 +102,7 @@ "@babel/runtime": "7.16.3", "@babel/template": "7.16.0", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.1.2", + "@ngtools/webpack": "13.1.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -111,9 +111,9 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "10.0.0", "core-js": "3.19.3", - "critters": "0.0.15", + "critters": "0.0.16", "css-loader": "6.5.1", - "esbuild-wasm": "0.14.2", + "esbuild-wasm": "0.14.11", "glob": "7.2.0", "https-proxy-agent": "5.0.0", "inquirer": "8.2.0", @@ -159,7 +159,7 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.14.2" + "esbuild": "0.14.11" }, "peerDependencies": { "@angular/compiler-cli": "^13.0.0 || ^13.1.0-next", @@ -211,12 +211,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.2.tgz", - "integrity": "sha512-Xk0k0tMcLOy2HI1/YrfWeLUrtKvk7/E7fhG3XoozT/pXBQgiZGoPuCt34HNPDkx3WNSedzvh5DNv8kPlILfjIw==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.3.tgz", + "integrity": "sha512-FFwKdhq5n0lrqkiJRZoWKy21gERtvupkk0BpIVPTbRqyiqB2htiGM995uBBjpeDngytDLx+BwPFipVfQ+WIi9w==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1301.2", + "@angular-devkit/architect": "0.1301.3", "rxjs": "6.6.7" }, "engines": { @@ -248,9 +248,9 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz", - "integrity": "sha512-uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.3.tgz", + "integrity": "sha512-o14jGDk4h14dVYYQafOn+2rq9CDmDMbDV6logqKYCLzTDRlK8gccDnqJM/QKAlfWCzbllZqcHDmg6FyoRLO9RQ==", "dev": true, "dependencies": { "ajv": "8.8.2", @@ -293,12 +293,12 @@ "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.2.tgz", - "integrity": "sha512-ayYbHGU8QpMGx8ZyhKOBupz+Zfv/2H1pNQErahYV3qg7hA9hfjTGmNmDQ4iw0fiT04NajjUxuomlKsCsg7oXDw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.3.tgz", + "integrity": "sha512-TvjThB/pFXNFM0j0WX5yg0L2/3xNsqawQuWhkDJ05MBDEnSxbgv5hmOzNL8SNIEMgP0VbSTHtSg5kZvmNiH7vg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -329,9 +329,9 @@ "dev": true }, "node_modules/@angular/animations": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.1.tgz", - "integrity": "sha512-6ECC9Dn5gmV4U1cz1pRJ2p5lo0BET2CjG1RbhTaZR8lOsoMsmlV/JdBAp8eyYTiGii3MLS6Q2P/hN/YG2SRGQQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.2.tgz", + "integrity": "sha512-k1eQ8YZq3eelLhJDQjkRCt/4MXxwK2TFeGdtcYJF0G7vFOppE8hlI4PT7Bvmk08lTqvgiqtTI3ZaYmIINLfUMg==", "dependencies": { "tslib": "^2.3.0" }, @@ -339,20 +339,20 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.1.1" + "@angular/core": "13.1.2" } }, "node_modules/@angular/cli": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.2.tgz", - "integrity": "sha512-jEsQWzHgODFpppWGb49jfqlN8YYhphsKY3MPHlrjmd05qWgKItUGSgA46hSoDqjaJKVUN9koUnJBFCc9utERYA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.3.tgz", + "integrity": "sha512-Ju/A8LFnfcv1PC665a5FiIQx9SXqB+3yWYFXPIiVkkRcye95gpfsbV48WW7QV35gzIwbR1m3H907Zg6ptiNv0A==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", - "@schematics/angular": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", + "@schematics/angular": "13.1.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -379,9 +379,9 @@ } }, "node_modules/@angular/common": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.1.tgz", - "integrity": "sha512-FQwRZ1XgTH2PbPjBmq2jAZzETVNX9yWQt21MuNGtokC7V4eS0NYlFIDbhy3UPWCzRgd3+P7P4+HdX15VxCjf9g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.2.tgz", + "integrity": "sha512-/8RWYQkZ1KPNvu2FANJM44wXlOMjMyxZVOEIn3llMRgxV2iiYtmluAOJNafTAbKedAuD6wiSpbi++QbioqCyyA==", "dependencies": { "tslib": "^2.3.0" }, @@ -389,14 +389,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.1.1", + "@angular/core": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.1.tgz", - "integrity": "sha512-WS+BB4h2LOBAGQ+P+RcKDw43Z7yAB5m1RY2/MAI+qI339V97WlWEQXxSMvBhCuzJnww1SSZfHMADaB54Jdjx2g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.2.tgz", + "integrity": "sha512-xbM3eClhUIHEFR0Et1bVC18Q7+kJx+hNNWWQl63RNYYBxTZnZpXA3mYi6IcEasy7BHkobVW+5teqlibFQY4gfQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -405,9 +405,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.1.tgz", - "integrity": "sha512-ycdXN2urBZepbXn2xx1oxF1i6g0Dq/Rb8ySQeELdL9qr6hiZF9fkvIwd91d8uhFG2PvoM4O8/U/3x4yA2bXzew==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.2.tgz", + "integrity": "sha512-yqM6RLcYtfwIuqBQ7eS7WdksBYY7Dh9sP4rElgLiEhDGIPQf6YE5zeuRThGq5pQ2fvHbNflw8QmTHu/18Y1u/g==", "dev": true, "dependencies": { "@babel/core": "^7.8.6", @@ -431,14 +431,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.1.1", + "@angular/compiler": "13.1.2", "typescript": ">=4.4.2 <4.6" } }, "node_modules/@angular/core": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.1.tgz", - "integrity": "sha512-oLGKgzUbHqte/q7EokOJWUiXAtBjwuZM6c9Or2a7WDJNeImQilxk5qy91RPSbP8FhOBysebqAayrfiCYexlShg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.2.tgz", + "integrity": "sha512-dsb90lUf8BELzdg7MgSMfPc36xzZKsDggOimfXhIvmctgc+H71Zo07KYTy5JVqsscLdT+A/KBvtU1bKk4P+Rfg==", "dependencies": { "tslib": "^2.3.0" }, @@ -451,9 +451,9 @@ } }, "node_modules/@angular/forms": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.1.tgz", - "integrity": "sha512-wtYzRHPv4mf1Vsi4GEal5qcI2wjqUW+lu8Fsd2Aoe8NqkwtY3fq+iWEP/4pnvmH0RlC+3QbNNV/01D5UKolvgg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.2.tgz", + "integrity": "sha512-r5I5cPngk2Erxe/OEL9Hl1j1VcNSAAyVzh7KmtOP8z7RZYCd0MeRISKrmA5CGn5Dh7A5POFLoOpBatmvnc4Z/A==", "dependencies": { "tslib": "^2.3.0" }, @@ -461,16 +461,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.1.tgz", - "integrity": "sha512-jk9MGwnaVc98wmw5dRBicduI/a8dHtUzaAi1dV003fUWldS9a5FBuj/ym7DJubaD5Njl8l79SFbjrP9aAsqM5A==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.2.tgz", + "integrity": "sha512-yBUWtYJHr/1LuK3/YRRav2O82i6RHVPtRoAlZHoeTlh2CYA4u1m3JHq9XBrxIxSXexBX69pMrZENW1xskwKRTQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -478,9 +478,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "13.1.1", - "@angular/common": "13.1.1", - "@angular/core": "13.1.1" + "@angular/animations": "13.1.2", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -489,9 +489,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.1.tgz", - "integrity": "sha512-ujHJMhJk93hjLx/SQ67y7xiGh2UDL+toVi3OlorWvnYGgPR26ufyL+J73BA+RAKHSP2WPiXU+/87vSz8r+BEgA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.2.tgz", + "integrity": "sha512-gABOn8DxGai56WmIt5o+eXtduabiq4Mlprg+6+dv+2PvWV871pLvswV9EGUSgwKXvbhBlDZDuNFU5LgvNDuGFg==", "dependencies": { "tslib": "^2.3.0" }, @@ -499,16 +499,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/compiler": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1" + "@angular/common": "13.1.2", + "@angular/compiler": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2" } }, "node_modules/@angular/router": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.1.tgz", - "integrity": "sha512-rlz5BBgNX+G2vVu2Gb5avx3LL08i7R/xZO7zPwh0HhXz/Vp8XFlWwaqAGb6Hgat772K2uCxF1/JBLQCUBY2MNQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.2.tgz", + "integrity": "sha512-5S0De6SdlbERoX9FwOBiTWxINchW7nTPUIH/tdanOqq12cqp6/7NigOr3BZDSvUNIh/6Is+pSQTKGAbhxejN2w==", "dependencies": { "tslib": "^2.3.0" }, @@ -516,9 +516,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -541,9 +541,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true, "engines": { "node": ">=6.9.0" @@ -916,14 +916,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1012,15 +1012,15 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1083,9 +1083,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1816,9 +1816,9 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.16.7", @@ -1869,9 +1869,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -2250,19 +2250,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2271,12 +2271,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -2294,9 +2294,9 @@ } }, "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -2365,9 +2365,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.2.tgz", - "integrity": "sha512-F/KraxCCUjSn5nWVEQSuyVfnoE9j/bTcpIb+6e38/Hq/saPfsUoNiRjWlTAxCD44vHbMuVkJ/ZRZT6hdICAslw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.3.tgz", + "integrity": "sha512-6Pf52IbChm/dFuegfv0smeBTW2moi0Gdkyjgk/7VWqE6hN35m+YGrCh+XnPp1POJwOKxhAByhV9zs6NWxrK1vA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.15.0 || >=16.10.0", @@ -2516,13 +2516,13 @@ } }, "node_modules/@schematics/angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.2.tgz", - "integrity": "sha512-OMbuOsnzUFjIGeo99NYwIPwjX6udJAiT5Sj5K7QZZYj66HuAqNBMV57J8GPA56edx5mOHZZApWMjXLlOxRXbJA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.3.tgz", + "integrity": "sha512-IixVWAEtN97N74PCxg3T03Ar/ECjGyJBWKAjKTTCrgNSWhm2mKgIc4RyI6cVCnltfJWIo48fcFhlOx/elShaCg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", "jsonc-parser": "3.0.0" }, "engines": { @@ -2569,9 +2569,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -3545,9 +3545,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001298", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz", - "integrity": "sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true, "funding": { "type": "opencollective", @@ -3738,9 +3738,9 @@ "dev": true }, "node_modules/colors": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.2.tgz", - "integrity": "sha512-5QhJWPFZqkKIieXJPpCprdOytvH7v0AGWpu9K2jZ4LWkGg3dVBNoYPgGGRpEsc0jb8Boy0ElYrdjH9uXfhRSqw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "engines": { "node": ">=0.1.90" @@ -4068,13 +4068,13 @@ } }, "node_modules/critters": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz", - "integrity": "sha512-AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "css-select": "^4.1.3", + "css-select": "^4.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", "postcss": "^8.3.7", @@ -4753,9 +4753,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.38", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz", - "integrity": "sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "node_modules/emoji-regex": { @@ -4806,9 +4806,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4910,9 +4910,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", "dev": true, "hasInstallScript": true, "optional": true, @@ -4920,29 +4920,30 @@ "esbuild": "bin/esbuild" }, "optionalDependencies": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", "cpu": [ "arm64" ], @@ -4953,9 +4954,9 @@ ] }, "node_modules/esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", "cpu": [ "x64" ], @@ -4966,9 +4967,9 @@ ] }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", "cpu": [ "arm64" ], @@ -4979,9 +4980,9 @@ ] }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", "cpu": [ "x64" ], @@ -4992,9 +4993,9 @@ ] }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", "cpu": [ "arm64" ], @@ -5005,9 +5006,9 @@ ] }, "node_modules/esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", "cpu": [ "ia32" ], @@ -5018,9 +5019,9 @@ ] }, "node_modules/esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", "cpu": [ "x64" ], @@ -5031,9 +5032,9 @@ ] }, "node_modules/esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", "cpu": [ "arm" ], @@ -5044,9 +5045,9 @@ ] }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", "cpu": [ "arm64" ], @@ -5057,9 +5058,9 @@ ] }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", "cpu": [ "mips64el" ], @@ -5070,9 +5071,9 @@ ] }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", "cpu": [ "ppc64" ], @@ -5082,10 +5083,23 @@ "linux" ] }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", "cpu": [ "x64" ], @@ -5096,9 +5110,9 @@ ] }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", "cpu": [ "x64" ], @@ -5109,9 +5123,9 @@ ] }, "node_modules/esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", "cpu": [ "x64" ], @@ -5122,9 +5136,9 @@ ] }, "node_modules/esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", + "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", "dev": true, "bin": { "esbuild": "bin/esbuild" @@ -5134,9 +5148,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", "cpu": [ "ia32" ], @@ -5147,9 +5161,9 @@ ] }, "node_modules/esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", "cpu": [ "x64" ], @@ -5160,9 +5174,9 @@ ] }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", "cpu": [ "arm64" ], @@ -5569,9 +5583,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true, "funding": [ { @@ -6831,15 +6845,15 @@ ] }, "node_modules/karma": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz", - "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==", + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", + "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", "dev": true, "dependencies": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -7672,9 +7686,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -7762,12 +7776,12 @@ "optional": true }, "node_modules/node-forge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.0.tgz", - "integrity": "sha512-M4AsdaP0bGNaSPtatd/+f76asocI0cFaURRdeQVZvrJBrYp2Qohv5hDbGHykuNqCb1BYjWHjdS6HlN50qbztwA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true, "engines": { - "node": ">= 6.13.0" + "node": ">= 6.0.0" } }, "node_modules/node-gyp": { @@ -10781,12 +10795,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.13", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.13.tgz", - "integrity": "sha512-UmLwTKZwNmXYDAlRFhaEdgEg0dp9k5gfJXuO7uKvSqioN1M0+Mgf4V39IlVZMSuqGoCi6h5legkhNXvWy0rFSg==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "dependencies": { - "node-forge": "^1.2.0" + "node-forge": "^0.10.0" } }, "node_modules/semver": { @@ -11158,6 +11172,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "dependencies": { "atob": "^2.1.2", @@ -12101,9 +12116,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "engines": { "node": ">=10.13.0" @@ -12378,12 +12393,12 @@ } }, "@angular-devkit/architect": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.2.tgz", - "integrity": "sha512-v8e6OF80Ezo5MTHtFcq1AZJH+Wq+hN9pMZ1iLGkODIfKIW9zx6aPhx0JY0b7sZkfNVL8ay8JA8f339eBMnOE9A==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.3.tgz", + "integrity": "sha512-fFSevgYGZHCybYoyTkZ9b1YCSthBmoi77alwWjqMhYXUNXx7yx50zJZ6Ur2v3YpctVjU6eoGc5FDFyVHwXT0Iw==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "rxjs": "6.6.7" }, "dependencies": { @@ -12405,15 +12420,15 @@ } }, "@angular-devkit/build-angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.2.tgz", - "integrity": "sha512-0FeDqfjWJjgIU42T3136RNYb7Yv2as6Z8rAnfUlX6RjRGZf98+6ZQZ80yREgrLkm7L8G1qWJc1sn3NyVMDwf9A==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.3.tgz", + "integrity": "sha512-C5Qv8aGmpGbETG4Mawly/5LnkRwfJAzANL5BtYJn8ZaDlZKCkhvAaRXHpm4Mdqg5idACAT8hgYqPQvqyEBaVDA==", "dev": true, "requires": { "@ampproject/remapping": "1.0.2", - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/build-webpack": "0.1301.2", - "@angular-devkit/core": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/build-webpack": "0.1301.3", + "@angular-devkit/core": "13.1.3", "@babel/core": "7.16.0", "@babel/generator": "7.16.0", "@babel/helper-annotate-as-pure": "7.16.0", @@ -12424,7 +12439,7 @@ "@babel/runtime": "7.16.3", "@babel/template": "7.16.0", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.1.2", + "@ngtools/webpack": "13.1.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -12433,10 +12448,10 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "10.0.0", "core-js": "3.19.3", - "critters": "0.0.15", + "critters": "0.0.16", "css-loader": "6.5.1", - "esbuild": "0.14.2", - "esbuild-wasm": "0.14.2", + "esbuild": "0.14.11", + "esbuild-wasm": "0.14.11", "glob": "7.2.0", "https-proxy-agent": "5.0.0", "inquirer": "8.2.0", @@ -12497,12 +12512,12 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.2.tgz", - "integrity": "sha512-Xk0k0tMcLOy2HI1/YrfWeLUrtKvk7/E7fhG3XoozT/pXBQgiZGoPuCt34HNPDkx3WNSedzvh5DNv8kPlILfjIw==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.3.tgz", + "integrity": "sha512-FFwKdhq5n0lrqkiJRZoWKy21gERtvupkk0BpIVPTbRqyiqB2htiGM995uBBjpeDngytDLx+BwPFipVfQ+WIi9w==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1301.2", + "@angular-devkit/architect": "0.1301.3", "rxjs": "6.6.7" }, "dependencies": { @@ -12524,9 +12539,9 @@ } }, "@angular-devkit/core": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz", - "integrity": "sha512-uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.3.tgz", + "integrity": "sha512-o14jGDk4h14dVYYQafOn+2rq9CDmDMbDV6logqKYCLzTDRlK8gccDnqJM/QKAlfWCzbllZqcHDmg6FyoRLO9RQ==", "dev": true, "requires": { "ajv": "8.8.2", @@ -12555,12 +12570,12 @@ } }, "@angular-devkit/schematics": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.2.tgz", - "integrity": "sha512-ayYbHGU8QpMGx8ZyhKOBupz+Zfv/2H1pNQErahYV3qg7hA9hfjTGmNmDQ4iw0fiT04NajjUxuomlKsCsg7oXDw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.3.tgz", + "integrity": "sha512-TvjThB/pFXNFM0j0WX5yg0L2/3xNsqawQuWhkDJ05MBDEnSxbgv5hmOzNL8SNIEMgP0VbSTHtSg5kZvmNiH7vg==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -12585,23 +12600,23 @@ } }, "@angular/animations": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.1.tgz", - "integrity": "sha512-6ECC9Dn5gmV4U1cz1pRJ2p5lo0BET2CjG1RbhTaZR8lOsoMsmlV/JdBAp8eyYTiGii3MLS6Q2P/hN/YG2SRGQQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.2.tgz", + "integrity": "sha512-k1eQ8YZq3eelLhJDQjkRCt/4MXxwK2TFeGdtcYJF0G7vFOppE8hlI4PT7Bvmk08lTqvgiqtTI3ZaYmIINLfUMg==", "requires": { "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.2.tgz", - "integrity": "sha512-jEsQWzHgODFpppWGb49jfqlN8YYhphsKY3MPHlrjmd05qWgKItUGSgA46hSoDqjaJKVUN9koUnJBFCc9utERYA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.3.tgz", + "integrity": "sha512-Ju/A8LFnfcv1PC665a5FiIQx9SXqB+3yWYFXPIiVkkRcye95gpfsbV48WW7QV35gzIwbR1m3H907Zg6ptiNv0A==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", - "@schematics/angular": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", + "@schematics/angular": "13.1.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -12620,25 +12635,25 @@ } }, "@angular/common": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.1.tgz", - "integrity": "sha512-FQwRZ1XgTH2PbPjBmq2jAZzETVNX9yWQt21MuNGtokC7V4eS0NYlFIDbhy3UPWCzRgd3+P7P4+HdX15VxCjf9g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.2.tgz", + "integrity": "sha512-/8RWYQkZ1KPNvu2FANJM44wXlOMjMyxZVOEIn3llMRgxV2iiYtmluAOJNafTAbKedAuD6wiSpbi++QbioqCyyA==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.1.tgz", - "integrity": "sha512-WS+BB4h2LOBAGQ+P+RcKDw43Z7yAB5m1RY2/MAI+qI339V97WlWEQXxSMvBhCuzJnww1SSZfHMADaB54Jdjx2g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.2.tgz", + "integrity": "sha512-xbM3eClhUIHEFR0Et1bVC18Q7+kJx+hNNWWQl63RNYYBxTZnZpXA3mYi6IcEasy7BHkobVW+5teqlibFQY4gfQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.1.tgz", - "integrity": "sha512-ycdXN2urBZepbXn2xx1oxF1i6g0Dq/Rb8ySQeELdL9qr6hiZF9fkvIwd91d8uhFG2PvoM4O8/U/3x4yA2bXzew==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.2.tgz", + "integrity": "sha512-yqM6RLcYtfwIuqBQ7eS7WdksBYY7Dh9sP4rElgLiEhDGIPQf6YE5zeuRThGq5pQ2fvHbNflw8QmTHu/18Y1u/g==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -12655,41 +12670,41 @@ } }, "@angular/core": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.1.tgz", - "integrity": "sha512-oLGKgzUbHqte/q7EokOJWUiXAtBjwuZM6c9Or2a7WDJNeImQilxk5qy91RPSbP8FhOBysebqAayrfiCYexlShg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.2.tgz", + "integrity": "sha512-dsb90lUf8BELzdg7MgSMfPc36xzZKsDggOimfXhIvmctgc+H71Zo07KYTy5JVqsscLdT+A/KBvtU1bKk4P+Rfg==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.1.tgz", - "integrity": "sha512-wtYzRHPv4mf1Vsi4GEal5qcI2wjqUW+lu8Fsd2Aoe8NqkwtY3fq+iWEP/4pnvmH0RlC+3QbNNV/01D5UKolvgg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.2.tgz", + "integrity": "sha512-r5I5cPngk2Erxe/OEL9Hl1j1VcNSAAyVzh7KmtOP8z7RZYCd0MeRISKrmA5CGn5Dh7A5POFLoOpBatmvnc4Z/A==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.1.tgz", - "integrity": "sha512-jk9MGwnaVc98wmw5dRBicduI/a8dHtUzaAi1dV003fUWldS9a5FBuj/ym7DJubaD5Njl8l79SFbjrP9aAsqM5A==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.2.tgz", + "integrity": "sha512-yBUWtYJHr/1LuK3/YRRav2O82i6RHVPtRoAlZHoeTlh2CYA4u1m3JHq9XBrxIxSXexBX69pMrZENW1xskwKRTQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.1.tgz", - "integrity": "sha512-ujHJMhJk93hjLx/SQ67y7xiGh2UDL+toVi3OlorWvnYGgPR26ufyL+J73BA+RAKHSP2WPiXU+/87vSz8r+BEgA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.2.tgz", + "integrity": "sha512-gABOn8DxGai56WmIt5o+eXtduabiq4Mlprg+6+dv+2PvWV871pLvswV9EGUSgwKXvbhBlDZDuNFU5LgvNDuGFg==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.1.tgz", - "integrity": "sha512-rlz5BBgNX+G2vVu2Gb5avx3LL08i7R/xZO7zPwh0HhXz/Vp8XFlWwaqAGb6Hgat772K2uCxF1/JBLQCUBY2MNQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.2.tgz", + "integrity": "sha512-5S0De6SdlbERoX9FwOBiTWxINchW7nTPUIH/tdanOqq12cqp6/7NigOr3BZDSvUNIh/6Is+pSQTKGAbhxejN2w==", "requires": { "tslib": "^2.3.0" } @@ -12710,9 +12725,9 @@ } }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true }, "@babel/core": { @@ -13004,14 +13019,14 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" }, "dependencies": { "@babel/helper-annotate-as-pure": { @@ -13078,15 +13093,15 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "dependencies": { "@babel/template": { @@ -13138,9 +13153,9 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -13620,9 +13635,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.7", @@ -13655,9 +13670,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -13929,30 +13944,30 @@ } }, "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -13966,9 +13981,9 @@ } }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -14019,9 +14034,9 @@ "dev": true }, "@ngtools/webpack": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.2.tgz", - "integrity": "sha512-F/KraxCCUjSn5nWVEQSuyVfnoE9j/bTcpIb+6e38/Hq/saPfsUoNiRjWlTAxCD44vHbMuVkJ/ZRZT6hdICAslw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.3.tgz", + "integrity": "sha512-6Pf52IbChm/dFuegfv0smeBTW2moi0Gdkyjgk/7VWqE6hN35m+YGrCh+XnPp1POJwOKxhAByhV9zs6NWxrK1vA==", "dev": true, "requires": {} }, @@ -14136,13 +14151,13 @@ } }, "@schematics/angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.2.tgz", - "integrity": "sha512-OMbuOsnzUFjIGeo99NYwIPwjX6udJAiT5Sj5K7QZZYj66HuAqNBMV57J8GPA56edx5mOHZZApWMjXLlOxRXbJA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.3.tgz", + "integrity": "sha512-IixVWAEtN97N74PCxg3T03Ar/ECjGyJBWKAjKTTCrgNSWhm2mKgIc4RyI6cVCnltfJWIo48fcFhlOx/elShaCg==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", "jsonc-parser": "3.0.0" } }, @@ -14181,9 +14196,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", @@ -14971,9 +14986,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001298", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz", - "integrity": "sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true }, "canonical-path": { @@ -15117,9 +15132,9 @@ "dev": true }, "colors": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.2.tgz", - "integrity": "sha512-5QhJWPFZqkKIieXJPpCprdOytvH7v0AGWpu9K2jZ4LWkGg3dVBNoYPgGGRpEsc0jb8Boy0ElYrdjH9uXfhRSqw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "commander": { @@ -15378,13 +15393,13 @@ } }, "critters": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz", - "integrity": "sha512-AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "requires": { "chalk": "^4.1.0", - "css-select": "^4.1.3", + "css-select": "^4.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", "postcss": "^8.3.7", @@ -15891,9 +15906,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.38", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz", - "integrity": "sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "emoji-regex": { @@ -15937,9 +15952,9 @@ } }, "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -16023,153 +16038,161 @@ "dev": true }, "esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", "dev": true, "optional": true, "requires": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" } }, "esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", "dev": true, "optional": true }, "esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", + "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", "dev": true }, "esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", "dev": true, "optional": true }, @@ -16488,9 +16511,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "forwarded": { @@ -17430,15 +17453,15 @@ "dev": true }, "karma": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz", - "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==", + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", + "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -18059,9 +18082,9 @@ "dev": true }, "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", "dev": true }, "needle": { @@ -18127,9 +18150,9 @@ "optional": true }, "node-forge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.0.tgz", - "integrity": "sha512-M4AsdaP0bGNaSPtatd/+f76asocI0cFaURRdeQVZvrJBrYp2Qohv5hDbGHykuNqCb1BYjWHjdS6HlN50qbztwA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-gyp": { @@ -20382,12 +20405,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.13", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.13.tgz", - "integrity": "sha512-UmLwTKZwNmXYDAlRFhaEdgEg0dp9k5gfJXuO7uKvSqioN1M0+Mgf4V39IlVZMSuqGoCi6h5legkhNXvWy0rFSg==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { - "node-forge": "^1.2.0" + "node-forge": "^0.10.0" } }, "semver": { @@ -21414,9 +21437,9 @@ } }, "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, "webpack-subresource-integrity": { From 1eb188538a98a4bfe0349c2fd6d9545196f79524 Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Thu, 13 Jan 2022 16:47:18 +0100 Subject: [PATCH 04/10] =?UTF-8?q?dzia=C5=82aj=C4=85cy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app-routing.module.ts | 17 +++++- src/app/app.module.ts | 6 ++ src/app/home/home.component.html | 2 + .../note-form/note-form.component.html" | 1 - .../note-form/note-form.component.ts" | 53 ------------------ .../note.component.html" | 21 ------- .../note.component.ts" | 45 --------------- src/app/note/note-form/note-form.component.ts | 2 +- src/app/note/note.component.html | 10 +++- src/app/note/note.component.ts | 11 ++-- src/assets/img/flying-books.png | Bin 0 -> 59957 bytes 11 files changed, 40 insertions(+), 128 deletions(-) delete mode 100644 "src/app/note \342\200\224 kopia/note-form/note-form.component.html" delete mode 100644 "src/app/note \342\200\224 kopia/note-form/note-form.component.ts" delete mode 100644 "src/app/note \342\200\224 kopia/note.component.html" delete mode 100644 "src/app/note \342\200\224 kopia/note.component.ts" create mode 100644 src/assets/img/flying-books.png diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 6973633..e392b66 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,13 +1,19 @@ +import { NoteComponent } from './note/note.component'; +import { NoteFormComponent } from './note/note-form/note-form.component'; import { BookFormComponent } from './book/book-form/book-form.component'; import { BookComponent } from './book/book.component'; +import { HomeComponent } from './home/home.component'; import { RegistrationComponent } from './user/registration/registration.component'; import { UserComponent } from './user/user.component'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; + const routes: Routes = [ - {path:'', redirectTo:'/book', pathMatch:'full'}, + { + path:'', redirectTo:'/home', pathMatch:'full' + }, { path: 'book', component: BookComponent, children: [ @@ -19,6 +25,15 @@ const routes: Routes = [ children: [ {path: 'registration', component: RegistrationComponent} ] + }, + { + path: 'home', component: HomeComponent + }, + { + path: 'note', component: NoteComponent, + children: [ + {path: 'note-form', component: NoteFormComponent} + ] } ]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8c4c152..6c9cb19 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -8,6 +8,9 @@ import { ToastrModule } from 'ngx-toastr'; import { AppComponent } from './app.component'; import { BookComponent } from './book/book.component'; import { BookFormComponent } from './book/book-form/book-form.component'; +import { NoteComponent } from './note/note.component'; +import { NoteFormComponent } from './note/note-form/note-form.component'; +import { HomeComponent } from './home/home.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { UserComponent } from './user/user.component'; import { RegistrationComponent } from './user/registration/registration.component'; @@ -18,6 +21,9 @@ import { AppRoutingModule } from './app-routing.module'; AppComponent, BookComponent, BookFormComponent, + NoteComponent, + NoteFormComponent, + HomeComponent, UserComponent, RegistrationComponent ], diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index e69de29..e8385d1 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -0,0 +1,2 @@ +

Welcome to BookStoreApp

+ \ No newline at end of file diff --git "a/src/app/note \342\200\224 kopia/note-form/note-form.component.html" "b/src/app/note \342\200\224 kopia/note-form/note-form.component.html" deleted file mode 100644 index eefe3b7..0000000 --- "a/src/app/note \342\200\224 kopia/note-form/note-form.component.html" +++ /dev/null @@ -1 +0,0 @@ -

here you will find form to add a new note

\ No newline at end of file diff --git "a/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" "b/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" deleted file mode 100644 index 994b4cf..0000000 --- "a/src/app/note \342\200\224 kopia/note-form/note-form.component.ts" +++ /dev/null @@ -1,53 +0,0 @@ -import { ToastrService } from 'ngx-toastr'; -import { NoteService } from './../../shared/note.service'; -import { Component, OnInit } from '@angular/core'; -import { NgForm } from '@angular/forms'; -import { Note } from '../../shared/note.model'; - -@Component({ - selector: 'app-note-form', - templateUrl: './note-form.component.html', - styles: [ - ] -}) -export class NoteFormComponent implements OnInit { - - constructor(public service:NoteService, - private toastr:ToastrService) { } - - ngOnInit(): void { - } - - onSubmit(form:NgForm){ - if(this.service.formData.noteId==0) this.insertRecord(form); - else - this.updateRecord(form); - } - - insertRecord(form:NgForm){ - this.service.postNote().subscribe( - res => { - this.resetForm(form); - this.service.refreshList(); - this.toastr.success('Added successfully',"Add Note Register") - }, - err => { console.log(err)} - ); - } - - updateRecord(form: NgForm){ - this.service.putNote().subscribe( - res => { - this.resetForm(form); - this.service.refreshList(); - this.toastr.info('Updated successfully',"Add Note Register") - }, - err => { console.log(err)} - ); - } - - resetForm(form:NgForm){ - form.form.reset(); - this.service.formData = new Note(); - } -} diff --git "a/src/app/note \342\200\224 kopia/note.component.html" "b/src/app/note \342\200\224 kopia/note.component.html" deleted file mode 100644 index 12def4c..0000000 --- "a/src/app/note \342\200\224 kopia/note.component.html" +++ /dev/null @@ -1,21 +0,0 @@ -Add new note - - - - - - - - - - - - - - - - - -
TitleAuthorYour thoughts
{{note.bookId}}{{note.comment}} - -
diff --git "a/src/app/note \342\200\224 kopia/note.component.ts" "b/src/app/note \342\200\224 kopia/note.component.ts" deleted file mode 100644 index 560deed..0000000 --- "a/src/app/note \342\200\224 kopia/note.component.ts" +++ /dev/null @@ -1,45 +0,0 @@ -import { ToastrService } from 'ngx-toastr'; -import { Component, OnInit } from "@angular/core"; -import { NgForm } from '@angular/forms'; -import { Note } from 'app/shared/note.model'; -import { NoteService } from 'app/shared/note.service'; -import { Book } from 'app/shared/book.model'; -import { BookService } from 'app/shared/book.service'; -import { UserService } from 'app/shared/user.service'; - - -@Component({ - selector: 'app-note', - templateUrl: './note.component.html', - styles: [ - - ] -}) - -export class NoteComponent implements OnInit { - - constructor(public service: NoteService, - private toastr:ToastrService) { } - - ngOnInit(): void { - this.service.refreshList(); - } - - populateForm(selectedRecord:Note){ - this.service.formData = Object.assign({},selectedRecord) ; - } - - onDelete(id:number){ - if(confirm('Are you sure to delete this note?')) - { - this.service.deleteNote(id) - .subscribe( - res=>{ - this.service.refreshList(); - this.toastr.error("Deleted successfully","Note delete") - }, - err=>{console.log(err)} - ) - } - } -} diff --git a/src/app/note/note-form/note-form.component.ts b/src/app/note/note-form/note-form.component.ts index 994b4cf..0fbaddd 100644 --- a/src/app/note/note-form/note-form.component.ts +++ b/src/app/note/note-form/note-form.component.ts @@ -2,7 +2,7 @@ import { ToastrService } from 'ngx-toastr'; import { NoteService } from './../../shared/note.service'; import { Component, OnInit } from '@angular/core'; import { NgForm } from '@angular/forms'; -import { Note } from '../../shared/note.model'; +import { Note } from 'src/app/shared/note.model'; @Component({ selector: 'app-note-form', diff --git a/src/app/note/note.component.html b/src/app/note/note.component.html index 12def4c..7b26f98 100644 --- a/src/app/note/note.component.html +++ b/src/app/note/note.component.html @@ -1,4 +1,12 @@ -Add new note +
+

List Of Notes

+
+ +
+
+ +
+
diff --git a/src/app/note/note.component.ts b/src/app/note/note.component.ts index 560deed..6a46904 100644 --- a/src/app/note/note.component.ts +++ b/src/app/note/note.component.ts @@ -1,11 +1,12 @@ import { ToastrService } from 'ngx-toastr'; import { Component, OnInit } from "@angular/core"; import { NgForm } from '@angular/forms'; -import { Note } from 'app/shared/note.model'; -import { NoteService } from 'app/shared/note.service'; -import { Book } from 'app/shared/book.model'; -import { BookService } from 'app/shared/book.service'; -import { UserService } from 'app/shared/user.service'; +import { Note } from 'src/app/shared/note.model'; +import { NoteFormComponent } from './note-form/note-form.component'; +import { NoteService } from 'src/app/shared/note.service'; +import { Book } from 'src/app/shared/book.model'; +import { BookService } from 'src/app/shared/book.service'; +import { UserService } from 'src/app/shared/user.service'; @Component({ diff --git a/src/assets/img/flying-books.png b/src/assets/img/flying-books.png new file mode 100644 index 0000000000000000000000000000000000000000..da2d93c980ecf5eba459b78d87dbd8328e05a0e8 GIT binary patch literal 59957 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

oo*udsxv@M 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 Lo0nxWCLjL~EhCS% literal 0 HcmV?d00001 From 17bb9fe1fb1a765353ee321bb3836276e94dd3fb Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Thu, 13 Jan 2022 18:01:00 +0100 Subject: [PATCH 05/10] note --- .../note/note-form/note-form.component.html | 32 ++++++++++++++++++- src/app/note/note-form/note-form.component.ts | 2 +- src/app/note/note.component.html | 9 ++++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/app/note/note-form/note-form.component.html b/src/app/note/note-form/note-form.component.html index eefe3b7..3500095 100644 --- a/src/app/note/note-form/note-form.component.html +++ b/src/app/note/note-form/note-form.component.html @@ -1 +1,31 @@ -

here you will find form to add a new note

\ No newline at end of file +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ + + diff --git a/src/app/note/note-form/note-form.component.ts b/src/app/note/note-form/note-form.component.ts index 0fbaddd..e045347 100644 --- a/src/app/note/note-form/note-form.component.ts +++ b/src/app/note/note-form/note-form.component.ts @@ -18,7 +18,7 @@ export class NoteFormComponent implements OnInit { ngOnInit(): void { } - onSubmit(form:NgForm){ + onSubmitNote(form:NgForm){ if(this.service.formData.noteId==0) this.insertRecord(form); else this.updateRecord(form); diff --git a/src/app/note/note.component.html b/src/app/note/note.component.html index 7b26f98..e14d370 100644 --- a/src/app/note/note.component.html +++ b/src/app/note/note.component.html @@ -10,14 +10,17 @@

List Of Notes

- - - + + + + + + From 8cb26f61f02d79591f060741ef64ea5ebe39a3b5 Mon Sep 17 00:00:00 2001 From: IgnacyPawlak <56115888+IgnacyPawlak@users.noreply.github.com> Date: Sat, 15 Jan 2022 11:32:21 +0100 Subject: [PATCH 06/10] usunieto stare komponenty user --- src/app/app-routing.module.ts | 8 ---- src/app/app.module.ts | 9 +--- .../book/book-form/book-form.component.html | 3 +- .../note/note-form/note-form.component.html | 14 ++---- src/app/note/note-form/note-form.component.ts | 3 +- src/app/note/note.component.html | 24 ++++++++++ src/app/note/note.component.ts | 6 +-- src/app/shared/note.model.ts | 8 ++-- src/app/shared/note.service.ts | 10 +++++ src/app/shared/user.service.ts | 21 --------- .../registration/registration.component.html | 45 ------------------- .../registration/registration.component.ts | 17 ------- src/app/user/user.component.html | 5 --- src/app/user/user.component.ts | 16 ------- 14 files changed, 49 insertions(+), 140 deletions(-) delete mode 100644 src/app/shared/user.service.ts delete mode 100644 src/app/user/registration/registration.component.html delete mode 100644 src/app/user/registration/registration.component.ts delete mode 100644 src/app/user/user.component.html delete mode 100644 src/app/user/user.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index e392b66..b9659ba 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -3,8 +3,6 @@ import { NoteFormComponent } from './note/note-form/note-form.component'; import { BookFormComponent } from './book/book-form/book-form.component'; import { BookComponent } from './book/book.component'; import { HomeComponent } from './home/home.component'; -import { RegistrationComponent } from './user/registration/registration.component'; -import { UserComponent } from './user/user.component'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; @@ -20,12 +18,6 @@ const routes: Routes = [ {path:'book-form', component: BookFormComponent} ] }, - { - path: 'user', component: UserComponent, - children: [ - {path: 'registration', component: RegistrationComponent} - ] - }, { path: 'home', component: HomeComponent }, diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6c9cb19..5337cbb 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,3 @@ -import { UserService } from './shared/user.service'; import { HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @@ -12,8 +11,6 @@ import { NoteComponent } from './note/note.component'; import { NoteFormComponent } from './note/note-form/note-form.component'; import { HomeComponent } from './home/home.component'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { UserComponent } from './user/user.component'; -import { RegistrationComponent } from './user/registration/registration.component'; import { AppRoutingModule } from './app-routing.module'; @NgModule({ @@ -23,9 +20,7 @@ import { AppRoutingModule } from './app-routing.module'; BookFormComponent, NoteComponent, NoteFormComponent, - HomeComponent, - UserComponent, - RegistrationComponent + HomeComponent ], imports: [ BrowserModule, @@ -36,7 +31,7 @@ import { AppRoutingModule } from './app-routing.module'; AppRoutingModule, ReactiveFormsModule ], - providers: [UserService], + providers: [], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/book/book-form/book-form.component.html b/src/app/book/book-form/book-form.component.html index ecce027..c1de5bb 100644 --- a/src/app/book/book-form/book-form.component.html +++ b/src/app/book/book-form/book-form.component.html @@ -1,6 +1,5 @@
- +
- -
- - -
+
+ name="userId" #userId="ngModel" [(ngModel)]="service.formData.bookId" required [class.invalid]="bookId.invalid && bookId.touched"/>
+ name="bookId" #bookId="ngModel" [(ngModel)]="service.formData.userId" required [class.invalid]="userId.invalid && userId.touched"/>
+ name="comment" #comment="ngModel" [(ngModel)]="service.formData.comment" required [class.invalid]="comment.invalid && comment.touched"/>
diff --git a/src/app/note/note-form/note-form.component.ts b/src/app/note/note-form/note-form.component.ts index e045347..f166ace 100644 --- a/src/app/note/note-form/note-form.component.ts +++ b/src/app/note/note-form/note-form.component.ts @@ -1,3 +1,4 @@ +import { BookService } from './../../shared/book.service'; import { ToastrService } from 'ngx-toastr'; import { NoteService } from './../../shared/note.service'; import { Component, OnInit } from '@angular/core'; @@ -12,7 +13,7 @@ import { Note } from 'src/app/shared/note.model'; }) export class NoteFormComponent implements OnInit { - constructor(public service:NoteService, + constructor(public service:NoteService,public bookService:BookService, private toastr:ToastrService) { } ngOnInit(): void { diff --git a/src/app/note/note.component.html b/src/app/note/note.component.html index e14d370..f855065 100644 --- a/src/app/note/note.component.html +++ b/src/app/note/note.component.html @@ -30,3 +30,27 @@

List Of Notes

TitleAuthorYour thoughtsNote IdUSer IdBook IdComment
{{note.noteId}}{{note.userId}} {{note.bookId}} {{note.comment}}
+
+
+ + + + + + + + + + + + + + + + +
Book titleAuthorDescription
{{book.title}}{{book.author}}{{book.description}}
+
+ diff --git a/src/app/note/note.component.ts b/src/app/note/note.component.ts index 6a46904..0462bb7 100644 --- a/src/app/note/note.component.ts +++ b/src/app/note/note.component.ts @@ -6,9 +6,6 @@ import { NoteFormComponent } from './note-form/note-form.component'; import { NoteService } from 'src/app/shared/note.service'; import { Book } from 'src/app/shared/book.model'; import { BookService } from 'src/app/shared/book.service'; -import { UserService } from 'src/app/shared/user.service'; - - @Component({ selector: 'app-note', templateUrl: './note.component.html', @@ -20,10 +17,11 @@ import { UserService } from 'src/app/shared/user.service'; export class NoteComponent implements OnInit { constructor(public service: NoteService, - private toastr:ToastrService) { } + private toastr:ToastrService, public bookService:BookService) { } ngOnInit(): void { this.service.refreshList(); + this.bookService.refreshList(); } populateForm(selectedRecord:Note){ diff --git a/src/app/shared/note.model.ts b/src/app/shared/note.model.ts index f2e86cc..f8ffce1 100644 --- a/src/app/shared/note.model.ts +++ b/src/app/shared/note.model.ts @@ -1,6 +1,6 @@ export class Note { - noteId:number=0; - userId:number=0; - bookId:number=0; - comment:string=""; + noteId:number = 0; + userId:string = ""; + bookId:number = 0; + comment:string = ""; } \ No newline at end of file diff --git a/src/app/shared/note.service.ts b/src/app/shared/note.service.ts index fcfbcaf..2145c38 100644 --- a/src/app/shared/note.service.ts +++ b/src/app/shared/note.service.ts @@ -14,6 +14,8 @@ export class NoteService { list: Note[]; + listOfNotes: []; + postNote(){ return this.http.post(this.baseURL,this.formData); } @@ -26,6 +28,14 @@ export class NoteService { return this.http.delete(`${this.baseURL}/${id}`); } + getBookByNoteId(id:number){ + return this.http.get(`${this.baseURL}/GetBookByNoteId/${id}`); + } + + refreshListOfNotes(){ + + } + refreshList(){ this.http.get(this.baseURL) .toPromise() diff --git a/src/app/shared/user.service.ts b/src/app/shared/user.service.ts deleted file mode 100644 index 8b56d02..0000000 --- a/src/app/shared/user.service.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Injectable } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; - -@Injectable({ - providedIn: 'root' -}) -export class UserService { - - constructor(private fb:FormBuilder) { } - - - formModel = this.fb.group({ - UserName: [''], - Email: [''], - FullName: [''], - Passwords : this.fb.group({ - Password: [''], - ConfirmPassword: [''] - }) - }) -} diff --git a/src/app/user/registration/registration.component.html b/src/app/user/registration/registration.component.html deleted file mode 100644 index fe9829d..0000000 --- a/src/app/user/registration/registration.component.html +++ /dev/null @@ -1,45 +0,0 @@ -
-
-
-
- -

User Registration

-

-Using Asp.Net Core Web API and Angular

-
-
-
-
- -
- - -
-
- - -
-
- - -
-
-
- - -
-
- - -
-
- -
-
- -
-
- -
-
diff --git a/src/app/user/registration/registration.component.ts b/src/app/user/registration/registration.component.ts deleted file mode 100644 index 9298237..0000000 --- a/src/app/user/registration/registration.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UserService } from './../../shared/user.service'; -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-registration', - templateUrl: './registration.component.html', - styles: [ - ] -}) -export class RegistrationComponent implements OnInit { - - constructor(public service: UserService) { } - - ngOnInit(): void { - } - -} diff --git a/src/app/user/user.component.html b/src/app/user/user.component.html deleted file mode 100644 index 1d97ef8..0000000 --- a/src/app/user/user.component.html +++ /dev/null @@ -1,5 +0,0 @@ -
-
- -
-
diff --git a/src/app/user/user.component.ts b/src/app/user/user.component.ts deleted file mode 100644 index d969c2d..0000000 --- a/src/app/user/user.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-user', - templateUrl: './user.component.html', - styles: [ - ] -}) -export class UserComponent implements OnInit { - - constructor() { } - - ngOnInit(): void { - } - -} From ffb56c7b9b284950c2f0a5e4ebb8e122214d8f14 Mon Sep 17 00:00:00 2001 From: IgnacyPawlak <56115888+IgnacyPawlak@users.noreply.github.com> Date: Sat, 15 Jan 2022 15:07:53 +0100 Subject: [PATCH 07/10] tried added logging --- src/app/app-routing.module.ts | 18 ++-- src/app/app.component.html | 47 +++++++++- src/app/app.component.ts | 33 ++++++- src/app/app.module.ts | 19 +++- src/app/auth/helpers/auth.interceptor.ts | 26 ++++++ src/app/auth/login/login.component.html | 75 ++++++++++++++++ src/app/auth/login/login.component.ts | 51 +++++++++++ src/app/auth/register/register.component.html | 86 +++++++++++++++++++ src/app/auth/register/register.component.ts | 39 +++++++++ src/app/home/home.component.html | 5 ++ src/app/home/home.component.ts | 22 ++++- src/app/shared/auth.service.ts | 31 +++++++ src/app/shared/token-storage.service.ts | 38 ++++++++ src/app/shared/user.model.ts | 2 + src/app/shared/user.service.ts | 28 ++++++ .../board-admin/board-admin.component.html | 5 ++ .../user/board-admin/board-admin.component.ts | 23 +++++ .../user/board-user/board-user.component.html | 5 ++ .../user/board-user/board-user.component.ts | 26 ++++++ src/app/user/profile/profile.component.html | 26 ++++++ src/app/user/profile/profile.component.ts | 16 ++++ src/index.html | 6 ++ 22 files changed, 608 insertions(+), 19 deletions(-) create mode 100644 src/app/auth/helpers/auth.interceptor.ts create mode 100644 src/app/auth/login/login.component.html create mode 100644 src/app/auth/login/login.component.ts create mode 100644 src/app/auth/register/register.component.html create mode 100644 src/app/auth/register/register.component.ts create mode 100644 src/app/shared/auth.service.ts create mode 100644 src/app/shared/token-storage.service.ts create mode 100644 src/app/shared/user.model.ts create mode 100644 src/app/shared/user.service.ts create mode 100644 src/app/user/board-admin/board-admin.component.html create mode 100644 src/app/user/board-admin/board-admin.component.ts create mode 100644 src/app/user/board-user/board-user.component.html create mode 100644 src/app/user/board-user/board-user.component.ts create mode 100644 src/app/user/profile/profile.component.html create mode 100644 src/app/user/profile/profile.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index b9659ba..fd733a5 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,3 +1,8 @@ +import { BoardAdminComponent } from './user/board-admin/board-admin.component'; +import { BoardUserComponent } from './user/board-user/board-user.component'; +import { ProfileComponent } from './user/profile/profile.component'; +import { RegisterComponent } from './auth/register/register.component'; +import { LoginComponent } from './auth/login/login.component'; import { NoteComponent } from './note/note.component'; import { NoteFormComponent } from './note/note-form/note-form.component'; import { BookFormComponent } from './book/book-form/book-form.component'; @@ -9,18 +14,19 @@ import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ - { - path:'', redirectTo:'/home', pathMatch:'full' - }, + {path:'', redirectTo:'/home', pathMatch:'full'}, + {path: 'home', component: HomeComponent }, + {path: 'login', component: LoginComponent}, + {path: 'register', component: RegisterComponent}, + {path: 'profile', component: ProfileComponent}, + {path: 'user', component: BoardUserComponent}, + {path: 'admin', component: BoardAdminComponent}, { path: 'book', component: BookComponent, children: [ {path:'book-form', component: BookFormComponent} ] }, - { - path: 'home', component: HomeComponent - }, { path: 'note', component: NoteComponent, children: [ diff --git a/src/app/app.component.html b/src/app/app.component.html index 87f2b56..1761fb1 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,5 +1,48 @@ -
+
+ +
+
\ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 8d5111a..df21271 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,10 +1,37 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { TokenStorageService } from './shared/token-storage.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) -export class AppComponent { +export class AppComponent implements OnInit { title = 'BookStoreApp'; -} + private roles: string[] = []; + isLoggedIn = false; + showAdminBoard = false; + showModeratorBoard = false; + username?: string; + + constructor(private tokenStorageService: TokenStorageService) { } + + ngOnInit(): void { + this.isLoggedIn = !!this.tokenStorageService.getToken(); + + if (this.isLoggedIn) { + const user = this.tokenStorageService.getUser(); + this.roles = user.roles; + + this.showAdminBoard = this.roles.includes('ROLE_ADMIN'); + this.showModeratorBoard = this.roles.includes('ROLE_MODERATOR'); + + this.username = user.username; + } + } + + logout(): void { + this.tokenStorageService.signOut(); + window.location.reload(); + } +} \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5337cbb..044c312 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,3 +1,8 @@ +import { ProfileComponent } from './user/profile/profile.component'; +import { BoardUserComponent } from './user/board-user/board-user.component'; +import { BoardAdminComponent } from './user/board-admin/board-admin.component'; +import { LoginComponent } from './auth/login/login.component'; +import { RegisterComponent } from './auth/register/register.component'; import { HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @@ -10,9 +15,11 @@ import { BookFormComponent } from './book/book-form/book-form.component'; import { NoteComponent } from './note/note.component'; import { NoteFormComponent } from './note/note-form/note-form.component'; import { HomeComponent } from './home/home.component'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { FormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; +import {authInterceptorProviders} from './auth/helpers/auth.interceptor'; + @NgModule({ declarations: [ AppComponent, @@ -20,7 +27,12 @@ import { AppRoutingModule } from './app-routing.module'; BookFormComponent, NoteComponent, NoteFormComponent, - HomeComponent + HomeComponent, + RegisterComponent, + LoginComponent, + BoardAdminComponent, + BoardUserComponent, + ProfileComponent ], imports: [ BrowserModule, @@ -28,8 +40,7 @@ import { AppRoutingModule } from './app-routing.module'; HttpClientModule, BrowserAnimationsModule, ToastrModule.forRoot(), - AppRoutingModule, - ReactiveFormsModule + AppRoutingModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/auth/helpers/auth.interceptor.ts b/src/app/auth/helpers/auth.interceptor.ts new file mode 100644 index 0000000..40fe410 --- /dev/null +++ b/src/app/auth/helpers/auth.interceptor.ts @@ -0,0 +1,26 @@ +import { HTTP_INTERCEPTORS, HttpEvent } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; + +import { TokenStorageService } from '../../shared/token-storage.service'; +import { Observable } from 'rxjs'; + +const TOKEN_HEADER_KEY = 'Authorization'; // for Spring Boot back-end + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + constructor(private token: TokenStorageService) { } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + let authReq = req; + const token = this.token.getToken(); + if (token != null) { + authReq = req.clone({ headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token) }); + } + return next.handle(authReq); + } +} + +export const authInterceptorProviders = [ + { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true } +]; \ No newline at end of file diff --git a/src/app/auth/login/login.component.html b/src/app/auth/login/login.component.html new file mode 100644 index 0000000..8500bf8 --- /dev/null +++ b/src/app/auth/login/login.component.html @@ -0,0 +1,75 @@ +
+
+ +
+
+ + + +
+
+ + + +
+
+ +
+
+ +
+
+ +
+ Logged in as {{ roles }}. +
+
+
\ No newline at end of file diff --git a/src/app/auth/login/login.component.ts b/src/app/auth/login/login.component.ts new file mode 100644 index 0000000..2f3f759 --- /dev/null +++ b/src/app/auth/login/login.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthService } from '../../shared/auth.service'; +import { TokenStorageService } from '../../shared/token-storage.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html' +}) +export class LoginComponent implements OnInit { + form: any = { + email: null, + password: null + }; + isLoggedIn = false; + isLoginFailed = false; + errorMessage = ''; + roles: string[] = []; + + constructor(private authService: AuthService, private tokenStorage: TokenStorageService) { } + + ngOnInit(): void { + if (this.tokenStorage.getToken()) { + this.isLoggedIn = true; + this.roles = this.tokenStorage.getUser().roles; + } + } + + onSubmit(): void { + const { email, password } = this.form; + + this.authService.login(email, password).subscribe( + data => { + this.tokenStorage.saveToken(data.accessToken); + this.tokenStorage.saveUser(data); + + this.isLoginFailed = false; + this.isLoggedIn = true; + this.roles = this.tokenStorage.getUser().roles; + this.reloadPage(); + }, + err => { + this.errorMessage = err.error.message; + this.isLoginFailed = true; + } + ); + } + + reloadPage(): void { + window.location.reload(); + } +} \ No newline at end of file diff --git a/src/app/auth/register/register.component.html b/src/app/auth/register/register.component.html new file mode 100644 index 0000000..2b7be0a --- /dev/null +++ b/src/app/auth/register/register.component.html @@ -0,0 +1,86 @@ +
+
+ +
+
+ + +
+
Username is required
+
+ Username must be at least 3 characters +
+
+ Username must be at most 20 characters +
+
+
+
+ + +
+
Email is required
+
+ Email must be a valid email address +
+
+
+
+ + +
+
Password is required
+
+ Password must be at least 4 characters +
+
+
+
+ +
+ +
+ Signup failed!
{{ errorMessage }} +
+
+ +
+ Your registration is successful! +
+
+
\ No newline at end of file diff --git a/src/app/auth/register/register.component.ts b/src/app/auth/register/register.component.ts new file mode 100644 index 0000000..4b347b1 --- /dev/null +++ b/src/app/auth/register/register.component.ts @@ -0,0 +1,39 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthService } from '../../shared/auth.service'; + +@Component({ + selector: 'app-register', + templateUrl: './register.component.html' +}) + +export class RegisterComponent implements OnInit { + form: any = { + username: null, + email: null, + password: null + }; + isSuccessful = false; + isSignUpFailed = false; + errorMessage = ''; + + constructor(private authService: AuthService) { } + + ngOnInit(): void { + } + + onSubmit(): void { + const { username, email, password } = this.form; + + this.authService.register(username, email, password).subscribe( + data => { + console.log(data); + this.isSuccessful = true; + this.isSignUpFailed = false; + }, + err => { + this.errorMessage = err.error.message; + this.isSignUpFailed = true; + } + ); + } +} \ No newline at end of file diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index e8385d1..facfba7 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,2 +1,7 @@

Welcome to BookStoreApp

+
+
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 87c3da8..a118a7f 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -1,4 +1,5 @@ -import { Component } from "@angular/core"; +import { Component, OnInit } from "@angular/core"; +import { UserService } from "../shared/user.service"; @Component({ selector: 'app-note', @@ -8,6 +9,19 @@ import { Component } from "@angular/core"; ] }) -export class HomeComponent { - -} \ No newline at end of file +export class HomeComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getPublicContent().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } + } \ No newline at end of file diff --git a/src/app/shared/auth.service.ts b/src/app/shared/auth.service.ts new file mode 100644 index 0000000..8a01a63 --- /dev/null +++ b/src/app/shared/auth.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +const AUTH_API = 'http://localhost:44340/api/Access/'; + +const httpOptions = { + headers: new HttpHeaders({ 'Content-Type': 'application/json' }) +}; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + constructor(private http: HttpClient) { } + + login(username: string, password: string): Observable { + return this.http.post(AUTH_API + 'Login', { + username, + password + }); + } + + register(username: string, email: string, password: string): Observable { + return this.http.post(AUTH_API + 'Registration', { + username, + email, + password + }, httpOptions); + } +} \ No newline at end of file diff --git a/src/app/shared/token-storage.service.ts b/src/app/shared/token-storage.service.ts new file mode 100644 index 0000000..1486728 --- /dev/null +++ b/src/app/shared/token-storage.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; + +const TOKEN_KEY = 'auth-token'; +const USER_KEY = 'auth-user'; + +@Injectable({ + providedIn: 'root' +}) +export class TokenStorageService { + constructor() { } + + signOut(): void { + window.sessionStorage.clear(); + } + + public saveToken(token: string): void { + window.sessionStorage.removeItem(TOKEN_KEY); + window.sessionStorage.setItem(TOKEN_KEY, token); + } + + public getToken(): string | null { + return window.sessionStorage.getItem(TOKEN_KEY); + } + + public saveUser(user: any): void { + window.sessionStorage.removeItem(USER_KEY); + window.sessionStorage.setItem(USER_KEY, JSON.stringify(user)); + } + + public getUser(): any { + const user = window.sessionStorage.getItem(USER_KEY); + if (user) { + return JSON.parse(user); + } + + return {}; + } +} \ No newline at end of file diff --git a/src/app/shared/user.model.ts b/src/app/shared/user.model.ts new file mode 100644 index 0000000..c975a65 --- /dev/null +++ b/src/app/shared/user.model.ts @@ -0,0 +1,2 @@ +export class User { +} diff --git a/src/app/shared/user.service.ts b/src/app/shared/user.service.ts new file mode 100644 index 0000000..6497ba7 --- /dev/null +++ b/src/app/shared/user.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +const API_URL = 'http://localhost:44340/api/.../'; + +@Injectable({ + providedIn: 'root' +}) +export class UserService { + constructor(private http: HttpClient) { } + + getPublicContent(): Observable { + return this.http.get(API_URL + 'all', { responseType: 'text' }); + } + + getUserBoard(): Observable { + return this.http.get(API_URL + 'user', { responseType: 'text' }); + } + + getModeratorBoard(): Observable { + return this.http.get(API_URL + 'mod', { responseType: 'text' }); + } + + getAdminBoard(): Observable { + return this.http.get(API_URL + 'admin', { responseType: 'text' }); + } +} \ No newline at end of file diff --git a/src/app/user/board-admin/board-admin.component.html b/src/app/user/board-admin/board-admin.component.html new file mode 100644 index 0000000..df77501 --- /dev/null +++ b/src/app/user/board-admin/board-admin.component.html @@ -0,0 +1,5 @@ +
+
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/app/user/board-admin/board-admin.component.ts b/src/app/user/board-admin/board-admin.component.ts new file mode 100644 index 0000000..aa73ec5 --- /dev/null +++ b/src/app/user/board-admin/board-admin.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { UserService } from '../../shared/user.service'; + +@Component({ + selector: 'app-board-admin', + templateUrl: './board-admin.component.html' +}) +export class BoardAdminComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getAdminBoard().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } +} \ No newline at end of file diff --git a/src/app/user/board-user/board-user.component.html b/src/app/user/board-user/board-user.component.html new file mode 100644 index 0000000..df77501 --- /dev/null +++ b/src/app/user/board-user/board-user.component.html @@ -0,0 +1,5 @@ +
+
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/app/user/board-user/board-user.component.ts b/src/app/user/board-user/board-user.component.ts new file mode 100644 index 0000000..bbcd88f --- /dev/null +++ b/src/app/user/board-user/board-user.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { UserService } from '../../shared/user.service'; + +@Component({ + selector: 'app-board-user', + templateUrl: './board-user.component.html', + styles: [ + ] +}) +export class BoardUserComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getAdminBoard().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } + +} diff --git a/src/app/user/profile/profile.component.html b/src/app/user/profile/profile.component.html new file mode 100644 index 0000000..f8fc6fa --- /dev/null +++ b/src/app/user/profile/profile.component.html @@ -0,0 +1,26 @@ +
+
+

+ {{ currentUser.username }} Profile +

+
+

+ Token: + {{ currentUser.accessToken.substring(0, 20) }} ... + {{ currentUser.accessToken.substr(currentUser.accessToken.length - 20) }} +

+

+ Email: + {{ currentUser.email }} +

+ Roles: +
    +
  • + {{ role }} +
  • +
+
+ + + Please login. + \ No newline at end of file diff --git a/src/app/user/profile/profile.component.ts b/src/app/user/profile/profile.component.ts new file mode 100644 index 0000000..45f74d3 --- /dev/null +++ b/src/app/user/profile/profile.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; +import { TokenStorageService } from '../../shared/token-storage.service'; + +@Component({ + selector: 'app-profile', + templateUrl: './profile.component.html' +}) +export class ProfileComponent implements OnInit { + currentUser: any; + + constructor(private token: TokenStorageService) { } + + ngOnInit(): void { + this.currentUser = this.token.getUser(); + } +} \ No newline at end of file diff --git a/src/index.html b/src/index.html index de6fc68..4999c88 100644 --- a/src/index.html +++ b/src/index.html @@ -8,6 +8,12 @@ + From 38718ded1859d434ccd49c4d72c245460fb079ee Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Sat, 15 Jan 2022 16:00:58 +0100 Subject: [PATCH 08/10] style & home page style --- src/app/home/home.component.html | 11 +++++---- src/styles.css | 42 +++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index facfba7..b5a7d2c 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,7 +1,8 @@

Welcome to BookStoreApp

+ +
-
-

{{ content }}

-
-
- \ No newline at end of file +
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 13ce1f4..4e0270e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,11 +1,19 @@ /* You can add global styles to this file, and also import other style files */ :root{ - --main-color: rgb(233, 156, 84); - --text-color: rgb(48, 48, 48); - --label-color: black; - --input-color: rgb(53, 52, 52); - --button-color: black; + --maiN-color: #e1e5f2; + --text-color: #022b3a; + --label-color: #1f7a8c; + --input-color: #022b3a; + --button-color: #1f7a8c; + --accent-color: #e4e4e4; + --border-rad: 20px; } + +body{ + background-color: var(--main-color); + color: var(--text-color); +} + .form-group label { color: var(--label-color); } @@ -32,21 +40,17 @@ input.invalid { border-color: red; } -body{ - background-color: var(--main-color); - color: var(--text-color); -} input.form-control, input.forom-control:focus{ background-color: var(--main-color); color: black; border-color: black; - border-radius: 0px; + border-radius: var(--border-rad); border-width: 2px; } button[type=submit].btn{ - border-radius: 20px; + border-radius: var(--border-rad); background-color: var(--button-color); color: #fff; border-color: var(--button-color); @@ -74,4 +78,20 @@ form{ .bg-transparent{ background-color: transparent; +} + +.jumbotron{ + background-color: var(--main-color); +} + +table{ + border-radius: var(--border-rad); +} +.thead-light{ + background-color: var(--accent-color) !important; +} + +th{ + /* border-collapse: separate !important; */ + background-color: transparent !important; } \ No newline at end of file From 3a7d70293f3d73b17040a951b6c80c5c64b85aa3 Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Sat, 15 Jan 2022 20:18:47 +0100 Subject: [PATCH 09/10] nowy front cz. 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit na wzór tego z reacta --- src/app/app-routing.module.ts | 3 + src/app/app.component.html | 51 ++++++++++-- src/app/book/pending/pending.component.html | 2 + src/app/book/pending/pending.component.ts | 22 ++++++ src/app/home/home.component.html | 4 +- src/index.html | 30 ++++--- src/styles.css | 88 ++++++++++++++++++++- 7 files changed, 181 insertions(+), 19 deletions(-) create mode 100644 src/app/book/pending/pending.component.html create mode 100644 src/app/book/pending/pending.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index fd733a5..5405878 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,3 +1,4 @@ +import { PendingComponent } from './book/pending/pending.component'; import { BoardAdminComponent } from './user/board-admin/board-admin.component'; import { BoardUserComponent } from './user/board-user/board-user.component'; import { ProfileComponent } from './user/profile/profile.component'; @@ -25,8 +26,10 @@ const routes: Routes = [ path: 'book', component: BookComponent, children: [ {path:'book-form', component: BookFormComponent} + ] }, + {path: 'pending', component: PendingComponent}, { path: 'note', component: NoteComponent, children: [ diff --git a/src/app/app.component.html b/src/app/app.component.html index 1761fb1..b8cb64f 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,3 +1,44 @@ + + + + -
- - -
\ No newline at end of file + +
\ No newline at end of file diff --git a/src/app/book/pending/pending.component.html b/src/app/book/pending/pending.component.html new file mode 100644 index 0000000..3a3fcd4 --- /dev/null +++ b/src/app/book/pending/pending.component.html @@ -0,0 +1,2 @@ +

Tu będą książki oczekujące na zatwierdzenie przez administratora

+ diff --git a/src/app/book/pending/pending.component.ts b/src/app/book/pending/pending.component.ts new file mode 100644 index 0000000..efc8f97 --- /dev/null +++ b/src/app/book/pending/pending.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from "@angular/core"; +import { BookService } from "src/app/shared/book.service"; + +@Component({ + selector: 'app-note', + templateUrl: './pending.component.html', + styles: [ + + ] +}) + +export class PendingComponent implements OnInit { + content?: string; + + constructor(private service: BookService) { } + + + ngOnInit(): void { + this.service.refreshList(); + } + + } \ No newline at end of file diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index b5a7d2c..3625234 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,8 +1,8 @@

Welcome to BookStoreApp

-
+ \ No newline at end of file diff --git a/src/index.html b/src/index.html index 4999c88..bf61d6a 100644 --- a/src/index.html +++ b/src/index.html @@ -1,21 +1,33 @@ + BookStoreApp - - - + + + + + + + + - + + \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 4e0270e..6f4218e 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,4 +1,86 @@ -/* You can add global styles to this file, and also import other style files */ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; + } + .App{ + font-size: 24px; +} + +.MyContainer{ + margin-top: 40px; +} + +.MyTitle{ + font-size: 40px; +} + +.MyTitleGreen{ + font-size: 40px; + color: seagreen; +} + +.MyFormControl{ + margin-top: 10px; + margin-bottom: 10px; +} + +.MyTableButton{ + margin-top: 5px; + margin-bottom: 5px; + margin-left: 10px; + margin-right: 10px; +} + +.MyMarginTop{ + margin-top: 50px; +} + +.MyLogin{ + min-width: 400px; + max-width: 500px; + margin-left: auto; + margin-right: auto; + margin-top: 200px; + border: #303030 solid 5px; + border-radius: 50px; + padding: 50px; +} + +.MyLoginInfo{ + font-size: 40px; + text-align: center; +} + +.MyLoginRememberMe{ + font-size: 18px; +} + +.MyLoginRememberMe > label{ + margin-left: 10px; +} + +.MyCenter{ + margin-left: auto; + margin-right: auto; + width: 100px; +} + +.MyRegisterLink { + text-align: right; + font-size: 14px; +} + + +/* You can add global styles to this file, and also import other style files :root{ --maiN-color: #e1e5f2; --text-color: #022b3a; @@ -93,5 +175,5 @@ table{ th{ /* border-collapse: separate !important; */ - background-color: transparent !important; -} \ No newline at end of file + /* background-color: transparent !important; +} */ \ No newline at end of file From a8f198ed13cc723616f3891e9b3f94080ef7c8ed Mon Sep 17 00:00:00 2001 From: nanu-daxx Date: Sat, 15 Jan 2022 23:07:52 +0100 Subject: [PATCH 10/10] =?UTF-8?q?poprawka=20style=20i=20j=C4=99zyka=20na?= =?UTF-8?q?=20polski?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app-routing.module.ts | 5 +- src/app/app.component.html | 13 ++--- src/app/auth/login/login.component.html | 16 +++--- src/app/auth/register/register.component.html | 28 +++++------ .../book/book-form/book-form.component.html | 14 +++--- src/app/book/book.component.html | 20 +++++--- src/app/book/pending/pending.component.html | 2 - .../note/note-form/note-form.component.html | 21 +++----- src/app/note/note.component.html | 35 +++++++------ src/app/note/note.component.ts | 2 +- src/app/shared/note.model.ts | 2 +- .../site-in-development.component.html | 13 +++++ .../site-in-development.component.ts | 27 ++++++++++ src/styles.css | 50 +++++++++---------- 14 files changed, 139 insertions(+), 109 deletions(-) create mode 100644 src/app/site-in-development/site-in-development.component.html create mode 100644 src/app/site-in-development/site-in-development.component.ts diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 5405878..2c8ed2c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -12,7 +12,7 @@ import { HomeComponent } from './home/home.component'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; - +import { SiteInDevelopmentComponent } from './site-in-development/site-in-development.component'; const routes: Routes = [ {path:'', redirectTo:'/home', pathMatch:'full'}, @@ -35,7 +35,8 @@ const routes: Routes = [ children: [ {path: 'note-form', component: NoteFormComponent} ] - } + }, + {path:'site-in-development', component: SiteInDevelopmentComponent} ]; @NgModule({ diff --git a/src/app/app.component.html b/src/app/app.component.html index b8cb64f..f8c9346 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,5 +1,5 @@