@lenne.tech/ng-base 14.27.0 → 14.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,6 +37,9 @@ class LoginComponent {
37
37
  this.loginConfig = Object.assign(Object.assign({}, this.loginConfig), data.config);
38
38
  }
39
39
  }));
40
+ this.subscription.add(this.route.queryParams.subscribe((params) => {
41
+ this.redirectUrl = params.redirectUrl;
42
+ }));
40
43
  }
41
44
  ngOnDestroy() {
42
45
  this.subscription.unsubscribe();
@@ -65,7 +68,7 @@ class LoginComponent {
65
68
  this.userService.login(this.form.value).subscribe({
66
69
  next: (response) => {
67
70
  if (response) {
68
- this.router.navigate([this.loginConfig.redirectUrl]);
71
+ this.router.navigate([this.redirectUrl ? this.redirectUrl : this.loginConfig.redirectUrl]);
69
72
  this.form.reset();
70
73
  }
71
74
  else {
@@ -104,13 +107,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImpo
104
107
  }] } });
105
108
 
106
109
  class RegisterComponent {
107
- constructor(formsService, userService, router) {
110
+ constructor(formsService, userService, router, route) {
108
111
  this.formsService = formsService;
109
112
  this.userService = userService;
110
113
  this.router = router;
114
+ this.route = route;
115
+ this.redirectUrl = '';
116
+ this.subscription = new Subscription();
111
117
  }
112
118
  ngOnInit() {
113
119
  this.createForm();
120
+ this.subscription.add(this.route.queryParams.subscribe((params) => {
121
+ this.redirectUrl = params.redirectUrl;
122
+ }));
114
123
  }
115
124
  /**
116
125
  * Create login form
@@ -144,7 +153,7 @@ class RegisterComponent {
144
153
  this.userService.register(input).subscribe({
145
154
  next: (auth) => {
146
155
  if (auth) {
147
- this.router.navigate(['/main']);
156
+ this.router.navigate([this.redirectUrl ? this.redirectUrl : '/main']);
148
157
  }
149
158
  else {
150
159
  this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';
@@ -167,12 +176,12 @@ class RegisterComponent {
167
176
  window.scrollTo({ top: 0, behavior: 'smooth' });
168
177
  }
169
178
  }
170
- RegisterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RegisterComponent, deps: [{ token: i1.FormsService }, { token: i1.UserService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
179
+ RegisterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RegisterComponent, deps: [{ token: i1.FormsService }, { token: i1.UserService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
171
180
  RegisterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.10", type: RegisterComponent, selector: "base-register", ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column register-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div id=\"register-error\" class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'firstName'\"\n [name]=\"'firstName'\"\n [label]=\"'Vorname'\"\n [type]=\"'text'\"\n [control]=\"form.get('firstName')\"\n [autocomplete]=\"'given-name'\"\n ></base-input>\n <base-input\n [id]=\"'lastName'\"\n [name]=\"'lastName'\"\n [label]=\"'Nachname'\"\n [type]=\"'text'\"\n [control]=\"form.get('lastName')\"\n [autocomplete]=\"'family-name'\"\n ></base-input>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [control]=\"form.get('password')\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [name]=\"'password-confirm'\"\n [label]=\"'Passwort best\u00E4tigen'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n ></base-input>\n <base-checkbox [id]=\"'privacy'\" [control]=\"form.get('privacy')\">\n Hiermit best\u00E4tige ich, dass ich die <a routerLink=\"/datenschutz\">Datenschutzerkl\u00E4rung</a> gelesen habe und\n akzeptiere.\n </base-checkbox>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Registrieren</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n", styles: [".register-container{width:100%;padding:20px 0}@media (min-width: 768px){.register-container{max-width:400px}}\n"], dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.InputComponent, selector: "base-input", inputs: ["id", "name", "label", "placeholder", "autocomplete", "tabIndex", "control", "type", "required", "eyeButton", "objectPath"], outputs: ["enter"] }, { kind: "component", type: i5.CheckboxComponent, selector: "base-checkbox", inputs: ["id", "name", "label", "value", "control", "required", "objectPath"] }] });
172
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImport: i0, type: RegisterComponent, decorators: [{
173
182
  type: Component,
174
183
  args: [{ selector: 'base-register', template: "<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column register-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div id=\"register-error\" class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'firstName'\"\n [name]=\"'firstName'\"\n [label]=\"'Vorname'\"\n [type]=\"'text'\"\n [control]=\"form.get('firstName')\"\n [autocomplete]=\"'given-name'\"\n ></base-input>\n <base-input\n [id]=\"'lastName'\"\n [name]=\"'lastName'\"\n [label]=\"'Nachname'\"\n [type]=\"'text'\"\n [control]=\"form.get('lastName')\"\n [autocomplete]=\"'family-name'\"\n ></base-input>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [control]=\"form.get('password')\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [name]=\"'password-confirm'\"\n [label]=\"'Passwort best\u00E4tigen'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n ></base-input>\n <base-checkbox [id]=\"'privacy'\" [control]=\"form.get('privacy')\">\n Hiermit best\u00E4tige ich, dass ich die <a routerLink=\"/datenschutz\">Datenschutzerkl\u00E4rung</a> gelesen habe und\n akzeptiere.\n </base-checkbox>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Registrieren</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n", styles: [".register-container{width:100%;padding:20px 0}@media (min-width: 768px){.register-container{max-width:400px}}\n"] }]
175
- }], ctorParameters: function () { return [{ type: i1.FormsService }, { type: i1.UserService }, { type: i2.Router }]; } });
184
+ }], ctorParameters: function () { return [{ type: i1.FormsService }, { type: i1.UserService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
176
185
 
177
186
  class ForgotPasswordComponent {
178
187
  constructor(formsService, userService, router, toastService) {
@@ -1 +1 @@
1
- {"version":3,"file":"lenne.tech-ng-base-base-prototype.mjs","sources":["../../../projects/ng-base/base-prototype/pages/login/login.component.ts","../../../projects/ng-base/base-prototype/pages/login/login.component.html","../../../projects/ng-base/base-prototype/pages/register/register.component.ts","../../../projects/ng-base/base-prototype/pages/register/register.component.html","../../../projects/ng-base/base-prototype/pages/forgot-password/forgot-password.component.ts","../../../projects/ng-base/base-prototype/pages/forgot-password/forgot-password.component.html","../../../projects/ng-base/base-prototype/pages/profile/profile.component.ts","../../../projects/ng-base/base-prototype/pages/profile/profile.component.html","../../../projects/ng-base/base-prototype/pages/set-password/set-password.component.ts","../../../projects/ng-base/base-prototype/pages/set-password/set-password.component.html","../../../projects/ng-base/base-prototype/pages/email-verification/email-verification.component.ts","../../../projects/ng-base/base-prototype/pages/email-verification/email-verification.component.html","../../../projects/ng-base/base-prototype/base-prototype.module.ts","../../../projects/ng-base/base-prototype/public-api.ts","../../../projects/ng-base/base-prototype/lenne.tech-ng-base-base-prototype.ts"],"sourcesContent":["import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormsService, UserService, fullEmail, LoginConfig } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n @Input() config: LoginConfig = {};\n\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n subscription = new Subscription();\n loginConfig: LoginConfig = {\n redirectUrl: '/main',\n showPasswordForget: true,\n showRegister: true,\n logoUrl: '',\n };\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private router: Router,\n private route: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n this.loginConfig = { ...this.loginConfig, ...this.config };\n\n this.createForm();\n\n this.subscription.add(\n this.route.data.subscribe((data) => {\n // Merge config from route to component\n if (data?.config) {\n this.loginConfig = { ...this.loginConfig, ...data.config };\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup({\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n password: new UntypedFormControl('', Validators.required),\n });\n }\n\n /**\n * Submit login form\n */\n submit() {\n this.error = '';\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.scrollToTop();\n this.loading = false;\n return;\n }\n\n this.userService.login(this.form.value).subscribe({\n next: (response) => {\n if (response) {\n this.router.navigate([this.loginConfig.redirectUrl]);\n this.form.reset();\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.scrollToTop();\n }\n this.loading = false;\n },\n error: (error) => {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n\n // Wrong password\n if (error?.message?.includes('Unauthorized')) {\n this.error = 'Dein Passwort ist leider falsch. Bitte überprüfe deine Eingabe!';\n }\n\n // User not found\n if (error?.message?.includes('No user found')) {\n this.error = 'Es konnte kein Konto mit der E-Mail gefunden werden. Bitte gib eine gültige E-Mail ein!';\n }\n\n this.scrollToTop();\n this.loading = false;\n },\n });\n }\n\n scrollToTop() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column login-container\">\n <div class=\"container\">\n <img *ngIf=\"loginConfig?.logoUrl\" class=\"img-fluid mb-5\" [src]=\"loginConfig.logoUrl\" alt=\"Logo\" />\n\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [eyeButton]=\"true\"\n [autocomplete]=\"'current-password'\"\n [control]=\"form.get('password')\"\n ></base-input>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Einloggen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../passwort-vergessen\" *ngIf=\"loginConfig?.showPasswordForget\">Passwort vergessen</a>\n <a routerLink=\"../registrieren\" *ngIf=\"loginConfig?.showRegister\"\n >Noch kein Konto? Dann registriere Dich jetzt!</a\n >\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormsService, fullEmail, securePasswordValidator, UserService, Validation } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-register',\n templateUrl: './register.component.html',\n styleUrls: ['./register.component.scss'],\n})\nexport class RegisterComponent implements OnInit {\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n\n constructor(private formsService: FormsService, private userService: UserService, private router: Router) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n firstName: new UntypedFormControl('', [Validators.required]),\n lastName: new UntypedFormControl('', [Validators.required]),\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n password: new UntypedFormControl('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new UntypedFormControl('', [Validators.required, securePasswordValidator()]),\n privacy: new UntypedFormControl(false, Validators.requiredTrue),\n },\n {\n validators: [Validation.match('password', 'passwordConfirm')],\n }\n );\n }\n\n /**\n * Submit login form\n */\n submit() {\n this.error = '';\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.scrollToTop();\n this.loading = false;\n return;\n }\n\n const input = this.form.value;\n delete input.privacy;\n\n this.userService.register(input).subscribe({\n next: (auth) => {\n if (auth) {\n this.router.navigate(['/main']);\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.scrollToTop();\n }\n this.loading = false;\n },\n error: (err) => {\n if (err?.message?.includes('already exists')) {\n this.error =\n 'Mit dieser E-Mail gibt es bereits ein Konto. Bitte wähle eine andere E-Mail Adresse oder logge dich mit deinem Passwort ein.';\n this.scrollToTop();\n }\n\n this.loading = false;\n },\n });\n }\n\n scrollToTop() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column register-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div id=\"register-error\" class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'firstName'\"\n [name]=\"'firstName'\"\n [label]=\"'Vorname'\"\n [type]=\"'text'\"\n [control]=\"form.get('firstName')\"\n [autocomplete]=\"'given-name'\"\n ></base-input>\n <base-input\n [id]=\"'lastName'\"\n [name]=\"'lastName'\"\n [label]=\"'Nachname'\"\n [type]=\"'text'\"\n [control]=\"form.get('lastName')\"\n [autocomplete]=\"'family-name'\"\n ></base-input>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [control]=\"form.get('password')\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [name]=\"'password-confirm'\"\n [label]=\"'Passwort bestätigen'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n ></base-input>\n <base-checkbox [id]=\"'privacy'\" [control]=\"form.get('privacy')\">\n Hiermit bestätige ich, dass ich die <a routerLink=\"/datenschutz\">Datenschutzerklärung</a> gelesen habe und\n akzeptiere.\n </base-checkbox>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Registrieren</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormsService, fullEmail, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-forgot-password',\n templateUrl: './forgot-password.component.html',\n styleUrls: ['./forgot-password.component.scss'],\n})\nexport class ForgotPasswordComponent implements OnInit {\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private router: Router,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup({\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n });\n }\n\n /**\n * Submit form\n */\n submit() {\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.requestPasswordResetMail(this.form.get('email').value).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'password-forgot-success',\n title: 'Erfolgreich',\n description: 'Wir haben Dir eine E-Mail geschickt. Bitte überprüfe Dein Postfach.',\n type: ToastType.SUCCESS,\n });\n\n this.router.navigate(['/']);\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n }\n this.loading = false;\n },\n error: () => {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.loading = false;\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column forgot-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [autocomplete]=\"'email'\"\n [control]=\"form.get('email')\"\n ></base-input>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">E-Mail senden</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n <a routerLink=\"../registrieren\">Noch kein Konto? Dann registriere Dich jetzt!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AuthService, BasicUser, CMSFieldConfig, UserService } from '@lenne.tech/ng-base/shared';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'base-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.scss'],\n})\nexport class ProfileComponent implements OnInit {\n @Input() config: { [key: string]: CMSFieldConfig } = {};\n profileConfig: { [key: string]: CMSFieldConfig } = {\n avatar: {\n label: 'Profilbild',\n placeholder: '',\n croppingImage: true,\n croppingOptions: {\n aspectRatio: 1 / 1,\n format: 'png',\n },\n },\n email: {\n label: 'E-Mail',\n placeholder: '',\n },\n firstName: {\n label: 'Vorname',\n placeholder: '',\n },\n lastName: {\n label: 'Nachname',\n placeholder: '',\n },\n roles: {\n label: '',\n exclude: true,\n roles: ['admin'],\n },\n username: {\n label: 'Benutzername',\n placeholder: '',\n },\n password: {\n label: '',\n exclude: true,\n },\n };\n\n currentUser: BasicUser;\n\n constructor(private authService: AuthService, private route: ActivatedRoute, private userService: UserService) {\n this.currentUser = authService.currentUser;\n }\n\n ngOnInit() {\n this.profileConfig = { ...this.profileConfig, ...this.config };\n this.route.data.subscribe((data) => {\n // Merge config from route to component\n if (data) {\n this.profileConfig = { ...this.profileConfig, ...data };\n }\n });\n }\n\n /**\n * It gets the current user from the database and updates the current user in the session\n */\n updateSessionUser() {\n this.userService.get(this.authService.currentUser.id).subscribe((user) => {\n if (user) {\n this.authService.currentUser = user;\n }\n });\n }\n}\n","<div class=\"container\">\n <div class=\"py-5\">\n <base-model-form\n [id]=\"currentUser?.id\"\n [modelName]=\"'user'\"\n [label]=\"'Mein Profil'\"\n [config]=\"profileConfig || {}\"\n [delete]=\"false\"\n (finished)=\"updateSessionUser()\"\n ></base-model-form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation,\n} from '@lenne.tech/ng-base/shared';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n selector: 'base-set-password',\n templateUrl: './set-password.component.html',\n styleUrls: ['./set-password.component.scss'],\n})\nexport class SetPasswordComponent implements OnInit {\n @Input() redirectUrl = '/';\n form: FormGroup;\n loading = false;\n token: string;\n error = '';\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private toastService: ToastService,\n private route: ActivatedRoute,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n this.token = this.route.snapshot.params?.token;\n\n if (!this.token) {\n this.error =\n 'Der Link ist abgelaufen oder ungültig, bitte probiere es später erneut oder wende Dich an den Support.';\n }\n\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n { validators: Validation.match('password', 'passwordConfirm') }\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.resetPassword(this.token, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'set-password-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich gesetzt. Du kannst Dich nun einloggen.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.router.navigate([this.redirectUrl]);\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'set-password-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort setzen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column set-password-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort setzen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-email-verification',\n templateUrl: './email-verification.component.html',\n styleUrls: ['./email-verification.component.scss'],\n})\nexport class EmailVerificationComponent implements OnInit {\n token: string;\n mode: 'ERROR' | 'SUCCESS';\n loading = false;\n\n constructor(\n private route: ActivatedRoute,\n private userService: UserService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n this.token = this.route.snapshot.params?.token;\n\n if (!this.token) {\n this.mode = 'ERROR';\n return;\n }\n\n this.verifyUser();\n }\n\n verifyUser() {\n this.userService.verifyUser(this.token).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'email-verification-success',\n title: 'Erfolgreich',\n description: 'Du hast deine E-Mail erfolgreich verifiziert.',\n type: ToastType.SUCCESS,\n });\n\n this.mode = 'SUCCESS';\n\n setTimeout(() => {\n this.router.navigate(['/']);\n }, 3000);\n } else {\n this.mode = 'ERROR';\n }\n\n this.loading = false;\n },\n error: () => {\n this.mode = 'ERROR';\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column verification-container\">\n <div class=\"container text-center\">\n <h2 class=\"mb-4\">E-Mail bestätigen</h2>\n\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"mode === 'ERROR'\">\n Etwas ist schiefgelaufen und wir konnten Deine E-Mail leider nicht verifizieren. Bitte probiere es später erneut\n oder wende dich an den Support.\n </div>\n\n <div class=\"alert alert-success\" role=\"alert\" *ngIf=\"mode === 'SUCCESS'\">\n Deine E-Mail wurde erfolgreich verifiziert. Du wirst nun weitergeleitet.\n </div>\n\n <div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\n <div class=\"spinner-border text-secondary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { BaseModule } from '@lenne.tech/ng-base';\nimport { BaseComponentsModule } from '@lenne.tech/ng-base/base-components';\n\nimport { LoginComponent } from './pages/login/login.component';\nimport { RegisterComponent } from './pages/register/register.component';\nimport { ForgotPasswordComponent } from './pages/forgot-password/forgot-password.component';\nimport { ProfileComponent } from './pages/profile/profile.component';\nimport { SetPasswordComponent } from './pages/set-password/set-password.component';\nimport { EmailVerificationComponent } from './pages/email-verification/email-verification.component';\n\n// Modules\nconst imports = [BaseModule, FormsModule, RouterModule, ReactiveFormsModule, CommonModule, BaseComponentsModule];\n\n// Imported and exported elements\nconst elements = [\n // Components\n LoginComponent,\n RegisterComponent,\n ForgotPasswordComponent,\n ProfileComponent,\n SetPasswordComponent,\n EmailVerificationComponent,\n];\n\n@NgModule({\n declarations: elements,\n imports,\n exports: elements,\n})\nexport class BasePrototypeModule {}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './base-prototype.module';\n\n// Pages\nexport * from './pages/login/login.component';\nexport * from './pages/register/register.component';\nexport * from './pages/forgot-password/forgot-password.component';\nexport * from './pages/profile/profile.component';\nexport * from './pages/set-password/set-password.component';\nexport * from './pages/email-verification/email-verification.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"lenne.tech-ng-base-base-prototype.mjs","sources":["../../../projects/ng-base/base-prototype/pages/login/login.component.ts","../../../projects/ng-base/base-prototype/pages/login/login.component.html","../../../projects/ng-base/base-prototype/pages/register/register.component.ts","../../../projects/ng-base/base-prototype/pages/register/register.component.html","../../../projects/ng-base/base-prototype/pages/forgot-password/forgot-password.component.ts","../../../projects/ng-base/base-prototype/pages/forgot-password/forgot-password.component.html","../../../projects/ng-base/base-prototype/pages/profile/profile.component.ts","../../../projects/ng-base/base-prototype/pages/profile/profile.component.html","../../../projects/ng-base/base-prototype/pages/set-password/set-password.component.ts","../../../projects/ng-base/base-prototype/pages/set-password/set-password.component.html","../../../projects/ng-base/base-prototype/pages/email-verification/email-verification.component.ts","../../../projects/ng-base/base-prototype/pages/email-verification/email-verification.component.html","../../../projects/ng-base/base-prototype/base-prototype.module.ts","../../../projects/ng-base/base-prototype/public-api.ts","../../../projects/ng-base/base-prototype/lenne.tech-ng-base-base-prototype.ts"],"sourcesContent":["import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormsService, fullEmail, LoginConfig, UserService } from '@lenne.tech/ng-base/shared';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-login',\n templateUrl: './login.component.html',\n styleUrls: ['./login.component.scss'],\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n @Input() config: LoginConfig = {};\n\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n subscription = new Subscription();\n loginConfig: LoginConfig = {\n redirectUrl: '/main',\n showPasswordForget: true,\n showRegister: true,\n logoUrl: '',\n };\n redirectUrl: '';\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private router: Router,\n private route: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n this.loginConfig = { ...this.loginConfig, ...this.config };\n\n this.createForm();\n\n this.subscription.add(\n this.route.data.subscribe((data) => {\n // Merge config from route to component\n if (data?.config) {\n this.loginConfig = { ...this.loginConfig, ...data.config };\n }\n })\n );\n\n this.subscription.add(\n this.route.queryParams.subscribe((params) => {\n this.redirectUrl = params.redirectUrl;\n })\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup({\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n password: new UntypedFormControl('', Validators.required),\n });\n }\n\n /**\n * Submit login form\n */\n submit() {\n this.error = '';\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.scrollToTop();\n this.loading = false;\n return;\n }\n\n this.userService.login(this.form.value).subscribe({\n next: (response) => {\n if (response) {\n this.router.navigate([this.redirectUrl ? this.redirectUrl : this.loginConfig.redirectUrl]);\n this.form.reset();\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.scrollToTop();\n }\n this.loading = false;\n },\n error: (error) => {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n\n // Wrong password\n if (error?.message?.includes('Unauthorized')) {\n this.error = 'Dein Passwort ist leider falsch. Bitte überprüfe deine Eingabe!';\n }\n\n // User not found\n if (error?.message?.includes('No user found')) {\n this.error = 'Es konnte kein Konto mit der E-Mail gefunden werden. Bitte gib eine gültige E-Mail ein!';\n }\n\n this.scrollToTop();\n this.loading = false;\n },\n });\n }\n\n scrollToTop() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column login-container\">\n <div class=\"container\">\n <img *ngIf=\"loginConfig?.logoUrl\" class=\"img-fluid mb-5\" [src]=\"loginConfig.logoUrl\" alt=\"Logo\" />\n\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [eyeButton]=\"true\"\n [autocomplete]=\"'current-password'\"\n [control]=\"form.get('password')\"\n ></base-input>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Einloggen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../passwort-vergessen\" *ngIf=\"loginConfig?.showPasswordForget\">Passwort vergessen</a>\n <a routerLink=\"../registrieren\" *ngIf=\"loginConfig?.showRegister\"\n >Noch kein Konto? Dann registriere Dich jetzt!</a\n >\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormsService, fullEmail, securePasswordValidator, UserService, Validation } from '@lenne.tech/ng-base/shared';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'base-register',\n templateUrl: './register.component.html',\n styleUrls: ['./register.component.scss'],\n})\nexport class RegisterComponent implements OnInit {\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n redirectUrl = '';\n subscription = new Subscription();\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private router: Router,\n private route: ActivatedRoute\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n\n this.subscription.add(\n this.route.queryParams.subscribe((params) => {\n this.redirectUrl = params.redirectUrl;\n })\n );\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n firstName: new UntypedFormControl('', [Validators.required]),\n lastName: new UntypedFormControl('', [Validators.required]),\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n password: new UntypedFormControl('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new UntypedFormControl('', [Validators.required, securePasswordValidator()]),\n privacy: new UntypedFormControl(false, Validators.requiredTrue),\n },\n {\n validators: [Validation.match('password', 'passwordConfirm')],\n }\n );\n }\n\n /**\n * Submit login form\n */\n submit() {\n this.error = '';\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.scrollToTop();\n this.loading = false;\n return;\n }\n\n const input = this.form.value;\n delete input.privacy;\n\n this.userService.register(input).subscribe({\n next: (auth) => {\n if (auth) {\n this.router.navigate([this.redirectUrl ? this.redirectUrl : '/main']);\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.scrollToTop();\n }\n this.loading = false;\n },\n error: (err) => {\n if (err?.message?.includes('already exists')) {\n this.error =\n 'Mit dieser E-Mail gibt es bereits ein Konto. Bitte wähle eine andere E-Mail Adresse oder logge dich mit deinem Passwort ein.';\n this.scrollToTop();\n }\n\n this.loading = false;\n },\n });\n }\n\n scrollToTop() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column register-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div id=\"register-error\" class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'firstName'\"\n [name]=\"'firstName'\"\n [label]=\"'Vorname'\"\n [type]=\"'text'\"\n [control]=\"form.get('firstName')\"\n [autocomplete]=\"'given-name'\"\n ></base-input>\n <base-input\n [id]=\"'lastName'\"\n [name]=\"'lastName'\"\n [label]=\"'Nachname'\"\n [type]=\"'text'\"\n [control]=\"form.get('lastName')\"\n [autocomplete]=\"'family-name'\"\n ></base-input>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [control]=\"form.get('email')\"\n [autocomplete]=\"'email'\"\n ></base-input>\n <base-input\n [id]=\"'password'\"\n [name]=\"'password'\"\n [label]=\"'Passwort'\"\n [type]=\"'password'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [control]=\"form.get('password')\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [name]=\"'password-confirm'\"\n [label]=\"'Passwort bestätigen'\"\n [autocomplete]=\"'new-password'\"\n [eyeButton]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n ></base-input>\n <base-checkbox [id]=\"'privacy'\" [control]=\"form.get('privacy')\">\n Hiermit bestätige ich, dass ich die <a routerLink=\"/datenschutz\">Datenschutzerklärung</a> gelesen habe und\n akzeptiere.\n </base-checkbox>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Registrieren</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\nimport { FormsService, fullEmail, ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'base-forgot-password',\n templateUrl: './forgot-password.component.html',\n styleUrls: ['./forgot-password.component.scss'],\n})\nexport class ForgotPasswordComponent implements OnInit {\n form: UntypedFormGroup;\n error: string;\n loading: boolean;\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private router: Router,\n private toastService: ToastService\n ) {}\n\n ngOnInit(): void {\n this.createForm();\n }\n\n /**\n * Create login form\n */\n createForm() {\n this.form = new UntypedFormGroup({\n email: new UntypedFormControl('', [Validators.required, fullEmail()]),\n });\n }\n\n /**\n * Submit form\n */\n submit() {\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.requestPasswordResetMail(this.form.get('email').value).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'password-forgot-success',\n title: 'Erfolgreich',\n description: 'Wir haben Dir eine E-Mail geschickt. Bitte überprüfe Dein Postfach.',\n type: ToastType.SUCCESS,\n });\n\n this.router.navigate(['/']);\n } else {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n }\n this.loading = false;\n },\n error: () => {\n this.error = 'Etwas ist schiefgelaufen. Bitte probiere es später erneut.';\n this.loading = false;\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column forgot-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'email'\"\n [name]=\"'email'\"\n [label]=\"'E-Mail Adresse'\"\n [type]=\"'email'\"\n [autocomplete]=\"'email'\"\n [control]=\"form.get('email')\"\n ></base-input>\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">E-Mail senden</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n <hr />\n <a routerLink=\"../login\">Bereits ein Konto? Dann logge Dich hier ein!</a>\n <a routerLink=\"../registrieren\">Noch kein Konto? Dann registriere Dich jetzt!</a>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AuthService, BasicUser, CMSFieldConfig, UserService } from '@lenne.tech/ng-base/shared';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'base-profile',\n templateUrl: './profile.component.html',\n styleUrls: ['./profile.component.scss'],\n})\nexport class ProfileComponent implements OnInit {\n @Input() config: { [key: string]: CMSFieldConfig } = {};\n profileConfig: { [key: string]: CMSFieldConfig } = {\n avatar: {\n label: 'Profilbild',\n placeholder: '',\n croppingImage: true,\n croppingOptions: {\n aspectRatio: 1 / 1,\n format: 'png',\n },\n },\n email: {\n label: 'E-Mail',\n placeholder: '',\n },\n firstName: {\n label: 'Vorname',\n placeholder: '',\n },\n lastName: {\n label: 'Nachname',\n placeholder: '',\n },\n roles: {\n label: '',\n exclude: true,\n roles: ['admin'],\n },\n username: {\n label: 'Benutzername',\n placeholder: '',\n },\n password: {\n label: '',\n exclude: true,\n },\n };\n\n currentUser: BasicUser;\n\n constructor(private authService: AuthService, private route: ActivatedRoute, private userService: UserService) {\n this.currentUser = authService.currentUser;\n }\n\n ngOnInit() {\n this.profileConfig = { ...this.profileConfig, ...this.config };\n this.route.data.subscribe((data) => {\n // Merge config from route to component\n if (data) {\n this.profileConfig = { ...this.profileConfig, ...data };\n }\n });\n }\n\n /**\n * It gets the current user from the database and updates the current user in the session\n */\n updateSessionUser() {\n this.userService.get(this.authService.currentUser.id).subscribe((user) => {\n if (user) {\n this.authService.currentUser = user;\n }\n });\n }\n}\n","<div class=\"container\">\n <div class=\"py-5\">\n <base-model-form\n [id]=\"currentUser?.id\"\n [modelName]=\"'user'\"\n [label]=\"'Mein Profil'\"\n [config]=\"profileConfig || {}\"\n [delete]=\"false\"\n (finished)=\"updateSessionUser()\"\n ></base-model-form>\n </div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\nimport {\n FormsService,\n securePasswordValidator,\n ToastService,\n ToastType,\n UserService,\n Validation,\n} from '@lenne.tech/ng-base/shared';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n selector: 'base-set-password',\n templateUrl: './set-password.component.html',\n styleUrls: ['./set-password.component.scss'],\n})\nexport class SetPasswordComponent implements OnInit {\n @Input() redirectUrl = '/';\n form: FormGroup;\n loading = false;\n token: string;\n error = '';\n\n constructor(\n private formsService: FormsService,\n private userService: UserService,\n private toastService: ToastService,\n private route: ActivatedRoute,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n this.token = this.route.snapshot.params?.token;\n\n if (!this.token) {\n this.error =\n 'Der Link ist abgelaufen oder ungültig, bitte probiere es später erneut oder wende Dich an den Support.';\n }\n\n this.createForm();\n }\n\n /**\n * Create password change form\n */\n createForm() {\n this.form = new UntypedFormGroup(\n {\n password: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n passwordConfirm: new FormControl<string>('', [Validators.required, securePasswordValidator()]),\n },\n { validators: Validation.match('password', 'passwordConfirm') }\n );\n }\n\n /**\n * Submit form and change password of user\n */\n submit() {\n this.loading = true;\n\n if (this.form.invalid) {\n this.formsService.validateAllFormFields(this.form);\n this.loading = false;\n return;\n }\n\n this.userService.resetPassword(this.token, this.form.get('password').value).subscribe({\n next: (response) => {\n if (response) {\n this.form.reset();\n this.toastService.show({\n id: 'set-password-success',\n title: 'Erfolgreich',\n description: 'Passwort wurde erfolgreich gesetzt. Du kannst Dich nun einloggen.',\n type: ToastType.SUCCESS,\n });\n }\n\n this.router.navigate([this.redirectUrl]);\n this.loading = false;\n },\n error: (error) => {\n this.loading = false;\n this.toastService.show({\n id: 'set-password-error',\n title: 'Fehlgeschlagen',\n description: 'Passwort setzen ist fehlgeschlagen, bitte versuche es später erneut.',\n type: ToastType.ERROR,\n });\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column set-password-container\">\n <div class=\"container\">\n <form [formGroup]=\"form\">\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"error\">\n {{ error }}\n </div>\n <base-input\n [id]=\"'password'\"\n [label]=\"'Passwort'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('password')\"\n [tabIndex]=\"1\"\n [eyeButton]=\"true\"\n ></base-input>\n <base-input\n [id]=\"'password-confirm'\"\n [label]=\"'Passwort bestätigen'\"\n [required]=\"true\"\n [type]=\"'password'\"\n [control]=\"form.get('passwordConfirm')\"\n [tabIndex]=\"2\"\n [eyeButton]=\"true\"\n ></base-input>\n\n <div class=\"d-grid gap-2 text-center\">\n <button class=\"btn btn-primary\" (click)=\"submit()\" *ngIf=\"!loading\">Passwort setzen</button>\n <button class=\"btn btn-primary\" type=\"button\" disabled *ngIf=\"loading\">\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\n Loading...\n </button>\n </div>\n </form>\n </div>\n </div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ToastService, ToastType, UserService } from '@lenne.tech/ng-base/shared';\n\n@Component({\n selector: 'base-email-verification',\n templateUrl: './email-verification.component.html',\n styleUrls: ['./email-verification.component.scss'],\n})\nexport class EmailVerificationComponent implements OnInit {\n token: string;\n mode: 'ERROR' | 'SUCCESS';\n loading = false;\n\n constructor(\n private route: ActivatedRoute,\n private userService: UserService,\n private toastService: ToastService,\n private router: Router\n ) {}\n\n ngOnInit(): void {\n this.token = this.route.snapshot.params?.token;\n\n if (!this.token) {\n this.mode = 'ERROR';\n return;\n }\n\n this.verifyUser();\n }\n\n verifyUser() {\n this.userService.verifyUser(this.token).subscribe({\n next: (response) => {\n if (response) {\n this.toastService.show({\n id: 'email-verification-success',\n title: 'Erfolgreich',\n description: 'Du hast deine E-Mail erfolgreich verifiziert.',\n type: ToastType.SUCCESS,\n });\n\n this.mode = 'SUCCESS';\n\n setTimeout(() => {\n this.router.navigate(['/']);\n }, 3000);\n } else {\n this.mode = 'ERROR';\n }\n\n this.loading = false;\n },\n error: () => {\n this.mode = 'ERROR';\n },\n });\n }\n}\n","<div class=\"d-flex justify-content-center align-items-center h-100 py-5\">\n <div class=\"d-flex flex-column verification-container\">\n <div class=\"container text-center\">\n <h2 class=\"mb-4\">E-Mail bestätigen</h2>\n\n <div class=\"alert alert-danger\" role=\"alert\" *ngIf=\"mode === 'ERROR'\">\n Etwas ist schiefgelaufen und wir konnten Deine E-Mail leider nicht verifizieren. Bitte probiere es später erneut\n oder wende dich an den Support.\n </div>\n\n <div class=\"alert alert-success\" role=\"alert\" *ngIf=\"mode === 'SUCCESS'\">\n Deine E-Mail wurde erfolgreich verifiziert. Du wirst nun weitergeleitet.\n </div>\n\n <div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\n <div class=\"spinner-border text-secondary\" role=\"status\">\n <span class=\"visually-hidden\">Loading...</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { BaseModule } from '@lenne.tech/ng-base';\nimport { BaseComponentsModule } from '@lenne.tech/ng-base/base-components';\n\nimport { LoginComponent } from './pages/login/login.component';\nimport { RegisterComponent } from './pages/register/register.component';\nimport { ForgotPasswordComponent } from './pages/forgot-password/forgot-password.component';\nimport { ProfileComponent } from './pages/profile/profile.component';\nimport { SetPasswordComponent } from './pages/set-password/set-password.component';\nimport { EmailVerificationComponent } from './pages/email-verification/email-verification.component';\n\n// Modules\nconst imports = [BaseModule, FormsModule, RouterModule, ReactiveFormsModule, CommonModule, BaseComponentsModule];\n\n// Imported and exported elements\nconst elements = [\n // Components\n LoginComponent,\n RegisterComponent,\n ForgotPasswordComponent,\n ProfileComponent,\n SetPasswordComponent,\n EmailVerificationComponent,\n];\n\n@NgModule({\n declarations: elements,\n imports,\n exports: elements,\n})\nexport class BasePrototypeModule {}\n","/**\n * Exports for public API\n */\n\n// Module\nexport * from './base-prototype.module';\n\n// Pages\nexport * from './pages/login/login.component';\nexport * from './pages/register/register.component';\nexport * from './pages/forgot-password/forgot-password.component';\nexport * from './pages/profile/profile.component';\nexport * from './pages/set-password/set-password.component';\nexport * from './pages/email-verification/email-verification.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i2"],"mappings":";;;;;;;;;;;;;;;MAWa,cAAc,CAAA;AAezB,IAAA,WAAA,CACU,YAA0B,EAC1B,WAAwB,EACxB,MAAc,EACd,KAAqB,EAAA;AAHrB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAlBtB,QAAA,IAAM,CAAA,MAAA,GAAgB,EAAE,CAAC;AAKlC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAA,CAAA,WAAW,GAAgB;AACzB,YAAA,WAAW,EAAE,OAAO;AACpB,YAAA,kBAAkB,EAAE,IAAI;AACxB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;KAQE;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,WAAW,CAAA,EAAK,IAAI,CAAC,MAAM,CAAE,CAAC;QAE3D,IAAI,CAAC,UAAU,EAAE,CAAC;AAElB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;;AAEjC,YAAA,IAAI,IAAI,KAAJ,IAAA,IAAA,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;gBAChB,IAAI,CAAC,WAAW,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,WAAW,CAAA,EAAK,IAAI,CAAC,MAAM,CAAE,CAAC;AAC5D,aAAA;SACF,CAAC,CACH,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SACvC,CAAC,CACH,CAAC;KACH;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACjC;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC;AAC/B,YAAA,KAAK,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YACrE,QAAQ,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC1D,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAC3F,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,4DAA4D,CAAC;oBAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;;AACf,gBAAA,IAAI,CAAC,KAAK,GAAG,4DAA4D,CAAC;;AAG1E,gBAAA,IAAI,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,KAAK,GAAG,iEAAiE,CAAC;AAChF,iBAAA;;AAGD,gBAAA,IAAI,CAAA,EAAA,GAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC7C,oBAAA,IAAI,CAAC,KAAK,GAAG,yFAAyF,CAAC;AACxG,iBAAA;gBAED,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjD;;4GAvGU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,gFCX3B,qsDA0CA,EAAA,MAAA,EAAA,CAAA,2GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD/Ba,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,qsDAAA,EAAA,MAAA,EAAA,CAAA,2GAAA,CAAA,EAAA,CAAA;+KAKb,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEDK,iBAAiB,CAAA;AAO5B,IAAA,WAAA,CACU,YAA0B,EAC1B,WAAwB,EACxB,MAAc,EACd,KAAqB,EAAA;AAHrB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAP/B,QAAA,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AACjB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;KAO9B;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;AAElB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;SACvC,CAAC,CACH,CAAC;KACH;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAC9B;YACE,SAAS,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5D,QAAQ,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAA,KAAK,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACrE,YAAA,QAAQ,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;AACtF,YAAA,eAAe,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;YAC7F,OAAO,EAAE,IAAI,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC;SAChE,EACD;YACE,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAC9D,SAAA,CACF,CAAC;KACH;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;QAErB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACzC,YAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,gBAAA,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;AACvE,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,4DAA4D,CAAC;oBAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;;AACb,gBAAA,IAAI,CAAA,EAAA,GAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,KAAK;AACR,wBAAA,8HAA8H,CAAC;oBACjI,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,iBAAA;AAED,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjD;;+GApFU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,qDCX9B,+gFAkEA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDvDa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,+gFAAA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,CAAA;;;MEGd,uBAAuB,CAAA;AAKlC,IAAA,WAAA,CACU,YAA0B,EAC1B,WAAwB,EACxB,MAAc,EACd,YAA0B,EAAA;AAH1B,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;KAChC;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAAC;AAC/B,YAAA,KAAK,EAAE,IAAI,kBAAkB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACtE,SAAA,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChF,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,wBAAA,EAAE,EAAE,yBAAyB;AAC7B,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,WAAW,EAAE,qEAAqE;wBAClF,IAAI,EAAE,SAAS,CAAC,OAAO;AACxB,qBAAA,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,KAAK,GAAG,4DAA4D,CAAC;AAC3E,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,KAAK,GAAG,4DAA4D,CAAC;AAC1E,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACF,SAAA,CAAC,CAAC;KACJ;;qHA1DU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,4DCVpC,4sCA6BA,EAAA,MAAA,EAAA,CAAA,6GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDnBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,4sCAAA,EAAA,MAAA,EAAA,CAAA,6GAAA,CAAA,EAAA,CAAA;;;MEGrB,gBAAgB,CAAA;AAyC3B,IAAA,WAAA,CAAoB,WAAwB,EAAU,KAAqB,EAAU,WAAwB,EAAA;AAAzF,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAAU,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AAxCpG,QAAA,IAAM,CAAA,MAAA,GAAsC,EAAE,CAAC;QACxD,IAAA,CAAA,aAAa,GAAsC;AACjD,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,YAAY;AACnB,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,eAAe,EAAE;oBACf,WAAW,EAAE,CAAC,GAAG,CAAC;AAClB,oBAAA,MAAM,EAAE,KAAK;AACd,iBAAA;AACF,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA;AACD,YAAA,KAAK,EAAE;AACL,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,OAAO,CAAC;AACjB,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE,cAAc;AACrB,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA;AACD,YAAA,QAAQ,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA;SACF,CAAC;AAKA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;KAC5C;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAC,aAAa,CAAA,EAAK,IAAI,CAAC,MAAM,CAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;;AAEjC,YAAA,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,aAAa,GAAQ,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,aAAa,CAAA,EAAK,IAAI,CAAE,CAAC;AACzD,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACvE,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;AACrC,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;8GAhEU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,kFCT7B,iUAYA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDHa,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,iUAAA,EAAA,CAAA;yJAKf,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEOK,oBAAoB,CAAA;IAO/B,WACU,CAAA,YAA0B,EAC1B,WAAwB,EACxB,YAA0B,EAC1B,KAAqB,EACrB,MAAc,EAAA;AAJd,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AACrB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAXf,QAAA,IAAW,CAAA,WAAA,GAAG,GAAG,CAAC;AAE3B,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAEhB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;KAQP;IAEJ,QAAQ,GAAA;;AACN,QAAA,IAAI,CAAC,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAE/C,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,KAAK;AACR,gBAAA,wGAAwG,CAAC;AAC5G,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;AAED;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,gBAAgB,CAC9B;AACE,YAAA,QAAQ,EAAE,IAAI,WAAW,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;AACvF,YAAA,eAAe,EAAE,IAAI,WAAW,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAC/F,SAAA,EACD,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAChE,CAAC;KACH;AAED;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AACpF,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,wBAAA,EAAE,EAAE,sBAAsB;AAC1B,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,WAAW,EAAE,mEAAmE;wBAChF,IAAI,EAAE,SAAS,CAAC,OAAO;AACxB,qBAAA,CAAC,CAAC;AACJ,iBAAA;gBAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,EAAE,EAAE,oBAAoB;AACxB,oBAAA,KAAK,EAAE,gBAAgB;AACvB,oBAAA,WAAW,EAAE,sEAAsE;oBACnF,IAAI,EAAE,SAAS,CAAC,KAAK;AACtB,iBAAA,CAAC,CAAC;aACJ;AACF,SAAA,CAAC,CAAC;KACJ;;kHA5EU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,oBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,iGCjBjC,+1CAqCA,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDpBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,+1CAAA,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,CAAA;0MAKpB,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;METK,0BAA0B,CAAA;AAKrC,IAAA,WAAA,CACU,KAAqB,EACrB,WAAwB,EACxB,YAA0B,EAC1B,MAAc,EAAA;AAHd,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AACrB,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;AACxB,QAAA,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAC1B,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AANxB,QAAA,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;KAOZ;IAEJ,QAAQ,GAAA;;AACN,QAAA,IAAI,CAAC,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;AAE/C,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACpB,OAAO;AACR,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,UAAU,GAAA;QACR,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,wBAAA,EAAE,EAAE,4BAA4B;AAChC,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,WAAW,EAAE,+CAA+C;wBAC5D,IAAI,EAAE,SAAS,CAAC,OAAO;AACxB,qBAAA,CAAC,CAAC;AAEH,oBAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;oBAEtB,UAAU,CAAC,MAAK;wBACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC7B,EAAE,IAAI,CAAC,CAAC;AACV,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACrB,iBAAA;AAED,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;aACtB;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;aACrB;AACF,SAAA,CAAC,CAAC;KACJ;;wHAjDU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,+DCTvC,88BAsBA,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDba,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,88BAAA,EAAA,MAAA,EAAA,CAAA,yHAAA,CAAA,EAAA,CAAA;;;AEUrC;AACA,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAEjH;AACA,MAAM,QAAQ,GAAG;;IAEf,cAAc;IACd,iBAAiB;IACjB,uBAAuB;IACvB,gBAAgB;IAChB,oBAAoB;IACpB,0BAA0B;CAC3B,CAAC;MAOW,mBAAmB,CAAA;;iHAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kHAAnB,mBAAmB,EAAA,YAAA,EAAA;;QAb9B,cAAc;QACd,iBAAiB;QACjB,uBAAuB;QACvB,gBAAgB;QAChB,oBAAoB;QACpB,0BAA0B;AAAA,KAAA,EAAA,OAAA,EAAA,CAVX,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA;;QAK7G,cAAc;QACd,iBAAiB;QACjB,uBAAuB;QACvB,gBAAgB;QAChB,oBAAoB;QACpB,0BAA0B;AAAA,KAAA,EAAA,CAAA,CAAA;AAQf,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAH9B,OAAO,CAAA,EAAA,CAAA,CAAA;4FAGI,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,QAAQ;oBACtB,OAAO;AACP,oBAAA,OAAO,EAAE,QAAQ;iBAClB,CAAA;;;ACjCD;;AAEG;;ACFH;;AAEG;;;;"}