@firestitch/2fa 18.0.27 → 18.0.28

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.
Files changed (75) hide show
  1. package/app/modules/code-input/components/code-input/code-input.component.d.ts +1 -1
  2. package/app/modules/defaulted/components/defaulted/defaulted.component.d.ts +1 -1
  3. package/app/modules/manage/components/2fa-manage/2fa-manage.component.d.ts +2 -5
  4. package/app/modules/manage/components/app/app.component.d.ts +2 -5
  5. package/app/modules/manage/components/email/email.component.d.ts +2 -5
  6. package/app/modules/manage/components/emails/emails.component.d.ts +2 -4
  7. package/app/modules/manage/components/manage-methods/manage-methods.component.d.ts +2 -5
  8. package/app/modules/manage/components/number/number.component.d.ts +2 -5
  9. package/app/modules/manage/components/numbers/numbers.component.d.ts +2 -4
  10. package/app/modules/manage/services/two-factor-manage.service.d.ts +0 -2
  11. package/app/modules/verification/components/2fa-verification/2fa-verification.component.d.ts +2 -5
  12. package/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.d.ts +1 -3
  13. package/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.d.ts +2 -3
  14. package/app/modules/verification/directives/2fa-verification-resend.directive.d.ts +1 -1
  15. package/app/modules/verification-methods/components/verification-methods/verification-methods.component.d.ts +1 -3
  16. package/app/modules/verification-setup/data/verification-method.data.d.ts +1 -2
  17. package/app/modules/verification-setup/verification-setup.module.d.ts +13 -15
  18. package/app/modules/verification-setup/views/email/email.component.d.ts +1 -1
  19. package/app/modules/verification-setup/views/verify/verify.component.d.ts +1 -1
  20. package/esm2022/app/modules/code-input/components/code-input/code-input.component.mjs +7 -6
  21. package/esm2022/app/modules/defaulted/components/defaulted/defaulted.component.mjs +4 -3
  22. package/esm2022/app/modules/manage/components/2fa-manage/2fa-manage.component.mjs +11 -18
  23. package/esm2022/app/modules/manage/components/app/app.component.mjs +40 -32
  24. package/esm2022/app/modules/manage/components/email/email.component.mjs +41 -31
  25. package/esm2022/app/modules/manage/components/emails/emails.component.mjs +29 -22
  26. package/esm2022/app/modules/manage/components/manage-methods/manage-methods.component.mjs +38 -29
  27. package/esm2022/app/modules/manage/components/number/number.component.mjs +44 -32
  28. package/esm2022/app/modules/manage/components/numbers/numbers.component.mjs +29 -22
  29. package/esm2022/app/modules/manage/services/two-factor-manage.service.mjs +5 -9
  30. package/esm2022/app/modules/verification/components/2fa-verification/2fa-verification.component.mjs +22 -23
  31. package/esm2022/app/modules/verification/components/2fa-verification-code/2fa-verification-code.component.mjs +9 -13
  32. package/esm2022/app/modules/verification/components/2fa-verification-methods/2fa-verification-methods.component.mjs +37 -22
  33. package/esm2022/app/modules/verification/directives/2fa-verification-resend.directive.mjs +3 -2
  34. package/esm2022/app/modules/verification-methods/components/verification-methods/verification-methods.component.mjs +21 -18
  35. package/esm2022/app/modules/verification-setup/data/verification-method.data.mjs +5 -9
  36. package/esm2022/app/modules/verification-setup/verification-setup.module.mjs +8 -15
  37. package/esm2022/app/modules/verification-setup/views/email/email.component.mjs +30 -18
  38. package/esm2022/app/modules/verification-setup/views/verify/verify.component.mjs +24 -10
  39. package/esm2022/public_api.mjs +1 -4
  40. package/fesm2022/firestitch-2fa.mjs +296 -554
  41. package/fesm2022/firestitch-2fa.mjs.map +1 -1
  42. package/package.json +1 -1
  43. package/public_api.d.ts +0 -3
  44. package/app/modules/code-input/code-input.module.d.ts +0 -11
  45. package/app/modules/code-input/index.d.ts +0 -1
  46. package/app/modules/defaulted/components/defaulted/index.d.ts +0 -1
  47. package/app/modules/defaulted/defaulted.module.d.ts +0 -8
  48. package/app/modules/manage/components/2fa-manage/index.d.ts +0 -1
  49. package/app/modules/manage/fs-2f-manage.module.d.ts +0 -34
  50. package/app/modules/resend/components/resend/index.d.ts +0 -1
  51. package/app/modules/resend/components/resend/resend.component.d.ts +0 -14
  52. package/app/modules/resend/resend.module.d.ts +0 -9
  53. package/app/modules/verification/components/2fa-verification-code/index.d.ts +0 -1
  54. package/app/modules/verification/components/2fa-verification-methods/index.d.ts +0 -1
  55. package/app/modules/verification/components/index.d.ts +0 -3
  56. package/app/modules/verification/fs-2fa-verification.module.d.ts +0 -25
  57. package/app/modules/verification/index.d.ts +0 -3
  58. package/app/modules/verification-methods/fs-2f-verification-methods.module.d.ts +0 -14
  59. package/app/modules/verification-methods/index.d.ts +0 -1
  60. package/esm2022/app/modules/code-input/code-input.module.mjs +0 -36
  61. package/esm2022/app/modules/code-input/index.mjs +0 -2
  62. package/esm2022/app/modules/defaulted/components/defaulted/index.mjs +0 -2
  63. package/esm2022/app/modules/defaulted/defaulted.module.mjs +0 -22
  64. package/esm2022/app/modules/manage/components/2fa-manage/index.mjs +0 -2
  65. package/esm2022/app/modules/manage/fs-2f-manage.module.mjs +0 -120
  66. package/esm2022/app/modules/resend/components/resend/index.mjs +0 -2
  67. package/esm2022/app/modules/resend/components/resend/resend.component.mjs +0 -37
  68. package/esm2022/app/modules/resend/resend.module.mjs +0 -28
  69. package/esm2022/app/modules/verification/components/2fa-verification-code/index.mjs +0 -2
  70. package/esm2022/app/modules/verification/components/2fa-verification-methods/index.mjs +0 -2
  71. package/esm2022/app/modules/verification/components/index.mjs +0 -4
  72. package/esm2022/app/modules/verification/fs-2fa-verification.module.mjs +0 -95
  73. package/esm2022/app/modules/verification/index.mjs +0 -4
  74. package/esm2022/app/modules/verification-methods/fs-2f-verification-methods.module.mjs +0 -46
  75. package/esm2022/app/modules/verification-methods/index.mjs +0 -2
@@ -1,57 +1,46 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, ChangeDetectionStrategy, ViewChild, Input, Output, Inject, Injectable, NgModule, inject, Directive, HostListener, ChangeDetectorRef } from '@angular/core';
3
- import * as i1 from '@angular/material/dialog';
4
- import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
5
- import { of, Subject, BehaviorSubject, tap as tap$1 } from 'rxjs';
2
+ import { EventEmitter, Component, ChangeDetectionStrategy, ViewChild, Input, Output, inject, ChangeDetectorRef, Injectable, Directive, HostListener, NgModule } from '@angular/core';
3
+ import * as i1$2 from '@angular/material/dialog';
4
+ import { MAT_DIALOG_DATA, MatDialogRef, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose, MatDialog } from '@angular/material/dialog';
5
+ import { of, Subject, BehaviorSubject } from 'rxjs';
6
6
  import { switchMap, tap, finalize, filter, takeUntil, map } from 'rxjs/operators';
7
- import * as i10 from '@firestitch/form';
7
+ import * as i2 from '@firestitch/form';
8
8
  import { FsFormDirective, FsFormModule } from '@firestitch/form';
9
- import * as i2$1 from '@firestitch/message';
10
9
  import { FsMessage } from '@firestitch/message';
11
- import * as i3 from '@angular/common';
12
- import { CommonModule } from '@angular/common';
13
- import * as i4 from '@angular/forms';
14
- import { ControlContainer, NgForm, FormsModule } from '@angular/forms';
15
- import * as i5 from '@angular/material/button';
16
- import { MatButton, MatButtonModule } from '@angular/material/button';
17
- import * as i8 from '@angular/material/checkbox';
18
- import { MatCheckboxModule } from '@angular/material/checkbox';
19
- import * as i9 from '@firestitch/dialog';
20
- import { FsDialogModule } from '@firestitch/dialog';
21
- import * as i5$1 from '@firestitch/skeleton';
10
+ import * as i1$1 from '@angular/forms';
11
+ import { FormsModule, ControlContainer, NgForm } from '@angular/forms';
12
+ import * as i2$1 from '@firestitch/dialog';
13
+ import { FsDialogModule, FsDialog } from '@firestitch/dialog';
14
+ import { CdkScrollable } from '@angular/cdk/scrolling';
15
+ import * as i1$3 from '@firestitch/skeleton';
22
16
  import { FsSkeletonModule } from '@firestitch/skeleton';
23
- import * as i10$1 from '@firestitch/qrcode';
17
+ import * as i6 from '@firestitch/qrcode';
24
18
  import { FsQrcodeModule } from '@firestitch/qrcode';
25
- import * as i2 from '@firestitch/code-input';
19
+ import * as i1 from '@firestitch/code-input';
26
20
  import { FsCodeInputComponent, FsCodeInputModule } from '@firestitch/code-input';
27
- import * as i6$1 from '@angular/material/input';
28
- import { MatInputModule } from '@angular/material/input';
29
- import * as i7 from '@angular/material/form-field';
30
- import { MatFormFieldModule } from '@angular/material/form-field';
31
- import * as i5$2 from '@angular/material/icon';
32
- import { MatIconModule } from '@angular/material/icon';
33
- import * as i6 from '@angular/material/radio';
34
- import { MatRadioModule } from '@angular/material/radio';
35
- import * as i8$1 from '@firestitch/radiogroup';
21
+ import { MatCheckbox } from '@angular/material/checkbox';
22
+ import { MatButton, MatButtonModule } from '@angular/material/button';
23
+ import { NgTemplateOutlet, KeyValuePipe, CommonModule } from '@angular/common';
24
+ import * as i5 from '@firestitch/radiogroup';
36
25
  import { FsRadioGroupModule } from '@firestitch/radiogroup';
37
- import * as i8$2 from '@firestitch/phone';
26
+ import { MatIcon } from '@angular/material/icon';
27
+ import { MatRadioButton } from '@angular/material/radio';
28
+ import * as i3 from '@firestitch/phone';
38
29
  import { FsPhoneModule } from '@firestitch/phone';
39
- import * as i4$1 from '@firestitch/list';
30
+ import { MatFormField, MatLabel, MatFormFieldModule } from '@angular/material/form-field';
31
+ import { MatInput, MatInputModule } from '@angular/material/input';
32
+ import * as i1$5 from '@firestitch/list';
40
33
  import { FsListComponent, FsListModule } from '@firestitch/list';
41
- import * as i1$2 from '@firestitch/prompt';
42
- import * as i5$3 from '@firestitch/country';
34
+ import { FsPrompt } from '@firestitch/prompt';
35
+ import * as i2$2 from '@firestitch/country';
43
36
  import { FsCountryModule } from '@firestitch/country';
44
- import * as i1$1 from '@firestitch/chip';
37
+ import * as i1$4 from '@firestitch/chip';
45
38
  import { FsChipModule } from '@firestitch/chip';
46
- import * as i4$2 from '@firestitch/label';
39
+ import * as i1$6 from '@firestitch/label';
47
40
  import { FsLabelModule } from '@firestitch/label';
48
- import * as i2$2 from '@angular/material/progress-spinner';
49
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
50
- import * as i3$1 from '@angular/material/card';
51
- import { MatCardModule } from '@angular/material/card';
52
- import * as i1$3 from '@firestitch/api';
41
+ import { MatCard, MatCardHeader, MatCardTitle, MatCardContent, MatCardModule } from '@angular/material/card';
53
42
  import { FsApi } from '@firestitch/api';
54
- import * as i1$4 from '@angular/router';
43
+ import * as i1$7 from '@angular/router';
55
44
  import { Router, ActivatedRoute, RouterModule } from '@angular/router';
56
45
  import { FsCookie } from '@firestitch/cookie';
57
46
 
@@ -80,11 +69,11 @@ class CodeInputComponent {
80
69
  this.codeInput.focusOnField(0);
81
70
  }
82
71
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CodeInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
83
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CodeInputComponent, selector: "app-code-input", inputs: { codeLength: "codeLength", code: "code" }, outputs: { codeCompleted: "codeCompleted", codeChanged: "codeChanged" }, viewQueries: [{ propertyName: "codeInput", first: true, predicate: FsCodeInputComponent, descendants: true }], ngImport: i0, template: "<fs-code-input\n [codeLength]=\"codeLength\"\n [ngModel]=\"code\"\n name=\"code\"\n [isPrevFocusableAfterClearing]=\"false\"\n (completedLast)=\"codeComplete($event)\"\n (ngModelChange)=\"codeChanged.emit($event)\">\n</fs-code-input>\n", styles: ["code-input{--item-spacing: 10px;--item-height: 20px;--item-border: none;--item-border-bottom: 2px solid #949494;--item-border-has-value: none;--item-border-bottom-has-value: 2px solid #949494;--item-border-focused: none;--item-border-bottom-focused: 2px solid #0061AF;--item-shadow-focused: none;--item-border-radius: 0px}code-input ::ng-deep span:first-child{padding-left:0!important}code-input ::ng-deep span:last-child{padding-right:0!important}code-input ::ng-deep input{font-size:20px!important;height:40px!important;padding:0!important}\n"], dependencies: [{ kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FsCodeInputComponent, selector: "fs-code-input", inputs: ["codeLength", "inputType", "inputMode", "initialFocusField", "isCharsCode", "isCodeHidden", "isPrevFocusableAfterClearing", "isFocusingOnLastByClickIfFilled", "disabled", "autocapitalize"], outputs: ["changed", "completed", "completedLast"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CodeInputComponent, isStandalone: true, selector: "app-code-input", inputs: { codeLength: "codeLength", code: "code" }, outputs: { codeCompleted: "codeCompleted", codeChanged: "codeChanged" }, viewQueries: [{ propertyName: "codeInput", first: true, predicate: FsCodeInputComponent, descendants: true }], ngImport: i0, template: "<fs-code-input\n [codeLength]=\"codeLength\"\n [ngModel]=\"code\"\n name=\"code\"\n [isPrevFocusableAfterClearing]=\"false\"\n (completedLast)=\"codeComplete($event)\"\n (ngModelChange)=\"codeChanged.emit($event)\">\n</fs-code-input>\n", styles: ["code-input{--item-spacing: 10px;--item-height: 20px;--item-border: none;--item-border-bottom: 2px solid #949494;--item-border-has-value: none;--item-border-bottom-has-value: 2px solid #949494;--item-border-focused: none;--item-border-bottom-focused: 2px solid #0061AF;--item-shadow-focused: none;--item-border-radius: 0px}code-input ::ng-deep span:first-child{padding-left:0!important}code-input ::ng-deep span:last-child{padding-right:0!important}code-input ::ng-deep input{font-size:20px!important;height:40px!important;padding:0!important}\n"], dependencies: [{ kind: "ngmodule", type: FsCodeInputModule }, { kind: "component", type: i1.FsCodeInputComponent, selector: "fs-code-input", inputs: ["codeLength", "inputType", "inputMode", "initialFocusField", "isCharsCode", "isCodeHidden", "isPrevFocusableAfterClearing", "isFocusingOnLastByClickIfFilled", "disabled", "autocapitalize"], outputs: ["changed", "completed", "completedLast"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
84
73
  }
85
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CodeInputComponent, decorators: [{
86
75
  type: Component,
87
- args: [{ selector: 'app-code-input', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-code-input\n [codeLength]=\"codeLength\"\n [ngModel]=\"code\"\n name=\"code\"\n [isPrevFocusableAfterClearing]=\"false\"\n (completedLast)=\"codeComplete($event)\"\n (ngModelChange)=\"codeChanged.emit($event)\">\n</fs-code-input>\n", styles: ["code-input{--item-spacing: 10px;--item-height: 20px;--item-border: none;--item-border-bottom: 2px solid #949494;--item-border-has-value: none;--item-border-bottom-has-value: 2px solid #949494;--item-border-focused: none;--item-border-bottom-focused: 2px solid #0061AF;--item-shadow-focused: none;--item-border-radius: 0px}code-input ::ng-deep span:first-child{padding-left:0!important}code-input ::ng-deep span:last-child{padding-right:0!important}code-input ::ng-deep input{font-size:20px!important;height:40px!important;padding:0!important}\n"] }]
76
+ args: [{ selector: 'app-code-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FsCodeInputModule, FormsModule], template: "<fs-code-input\n [codeLength]=\"codeLength\"\n [ngModel]=\"code\"\n name=\"code\"\n [isPrevFocusableAfterClearing]=\"false\"\n (completedLast)=\"codeComplete($event)\"\n (ngModelChange)=\"codeChanged.emit($event)\">\n</fs-code-input>\n", styles: ["code-input{--item-spacing: 10px;--item-height: 20px;--item-border: none;--item-border-bottom: 2px solid #949494;--item-border-has-value: none;--item-border-bottom-has-value: 2px solid #949494;--item-border-focused: none;--item-border-bottom-focused: 2px solid #0061AF;--item-shadow-focused: none;--item-border-radius: 0px}code-input ::ng-deep span:first-child{padding-left:0!important}code-input ::ng-deep span:last-child{padding-right:0!important}code-input ::ng-deep input{font-size:20px!important;height:40px!important;padding:0!important}\n"] }]
88
77
  }], propDecorators: { codeInput: [{
89
78
  type: ViewChild,
90
79
  args: [FsCodeInputComponent]
@@ -99,10 +88,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
99
88
  }] } });
100
89
 
101
90
  class AppComponent {
102
- _data;
103
- _dialogRef;
104
- _cdRef;
105
- _message;
91
+ _data = inject(MAT_DIALOG_DATA);
92
+ _dialogRef = inject(MatDialogRef);
93
+ _cdRef = inject(ChangeDetectorRef);
94
+ _message = inject(FsMessage);
106
95
  form;
107
96
  twoFactorManageService;
108
97
  mode = 'qr-code';
@@ -112,12 +101,6 @@ class AppComponent {
112
101
  code;
113
102
  default;
114
103
  appType;
115
- constructor(_data, _dialogRef, _cdRef, _message) {
116
- this._data = _data;
117
- this._dialogRef = _dialogRef;
118
- this._cdRef = _cdRef;
119
- this._message = _message;
120
- }
121
104
  ngOnInit() {
122
105
  this.twoFactorManageService = this._data.twoFactorManageService;
123
106
  this.accountId = this._data.accountId;
@@ -161,22 +144,33 @@ class AppComponent {
161
144
  this._dialogRef.close(true);
162
145
  }));
163
146
  };
164
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i0.ChangeDetectorRef }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
165
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: AppComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Authenticator app setup\n </h1>\n <mat-dialog-content>\n <div\n *ngIf=\"mode === 'qr-code'\"\n class=\"qr-code\">\n <ng-container *ngIf=\"appType\">\n <ol>\n <li>\n <ng-container *ngIf=\"appType === 'authy'\">\n Install the Authy Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/authy/id494168017\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.authy.authy\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n </ng-container>\n <ng-container *ngIf=\"appType === 'google'\">\n Install the Google Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n </ng-container>\n </li>\n <ng-container *ngIf=\"appType === 'authy'\">\n <li>\n Open the Authy app and select\n <b>\n Add Account\n </b>\n .\n </li>\n <li>\n Select\n <b>\n Scan QR Code\n </b>\n and scan the QR code below.\n </li>\n </ng-container>\n <ng-container *ngIf=\"appType === 'google'\">\n <li>\n Open the Google Authentictor app and click the\n <b>\n Plus icon\n </b>\n in the lower right corner.\n </li>\n <li>\n Select\n <b>\n Scan a QR code\n </b>\n and scan the QR code below.\n </li>\n </ng-container>\n </ol>\n <ng-container *fsSkeleton=\"qrCodeUrl\">\n <fs-qrcode\n [value]=\"qrCodeUrl\"\n [width]=\"300\"\n [height]=\"300\">\n </fs-qrcode>\n </ng-container>\n </ng-container>\n <div\n class=\"app-types\"\n *ngIf=\"!appType\">\n <p>\n Select the Authenticator App you prefer\n </p>\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\"\n fill=\"#EC1C24\">\n </path>\n <path\n d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\"\n fill=\"#FFF\">\n </path>\n </svg>\n </a>\n Authy\n </span>\n <span>\n <a (click)=\"appTypeGoogle()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\"\n fill=\"#a0a0a0\">\n </path>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"></path>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"></path>\n </g>\n <path\n d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\"\n fill=\"#686868\">\n </path>\n <path\n d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\"\n fill=\"#c3c3c3\">\n </path>\n <path\n d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\"\n fill=\"#474747\">\n </path>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"></path>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"></path>\n </g>\n <path\n d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\"\n fill=\"#b0b0b0\">\n </path>\n <path\n d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\"\n fill=\"#939393\">\n </path>\n <path\n d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\"\n fill=\"#767676\">\n </path>\n <path\n d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\"\n fill=\"#bebebe\">\n </path>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n </div>\n </div>\n <div\n *ngIf=\"mode === 'code-input'\"\n class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n <app-code-input (codeChanged)=\"codeChanged($event)\"></app-code-input>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"appType\">\n <button\n *ngIf=\"mode === 'qr-code'\"\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n <button\n *ngIf=\"mode === 'code-input'\"\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button>\n </ng-container>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["ul{margin:0;padding-left:24px}fs-qrcode{display:flex;justify-content:center;margin:30px}app-code-input{margin-top:10px}.code-input{width:400px}mat-checkbox{overflow:hidden}.app-types{text-align:center;padding:0 40px}.app-types .row{display:flex;justify-content:center}.app-types .row span{display:flex;flex-direction:column;text-align:center;max-width:100px}.app-types .row span+span{margin-left:40px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "directive", type: i5$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i10$1.FsClipboardComponent, selector: "fs-qrcode", inputs: ["value", "width", "height"] }, { kind: "component", type: CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
148
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: AppComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Authenticator app setup\n </h1>\n <mat-dialog-content>\n @if (mode === 'qr-code') {\n <div\n class=\"qr-code\">\n @if (appType) {\n <ol>\n <li>\n @if (appType === 'authy') {\n Install the Authy Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/authy/id494168017\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.authy.authy\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n }\n @if (appType === 'google') {\n Install the Google Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n }\n </li>\n @if (appType === 'authy') {\n <li>\n Open the Authy app and select\n <b>\n Add Account\n </b>\n .\n </li>\n <li>\n Select\n <b>\n Scan QR Code\n </b>\n and scan the QR code below.\n </li>\n }\n @if (appType === 'google') {\n <li>\n Open the Google Authentictor app and click the\n <b>\n Plus icon\n </b>\n in the lower right corner.\n </li>\n <li>\n Select\n <b>\n Scan a QR code\n </b>\n and scan the QR code below.\n </li>\n }\n </ol>\n <ng-container *fsSkeleton=\"qrCodeUrl\">\n <fs-qrcode\n [value]=\"qrCodeUrl\"\n [width]=\"300\"\n [height]=\"300\">\n </fs-qrcode>\n </ng-container>\n }\n @if (!appType) {\n <div\n class=\"app-types\"\n >\n <p>\n Select the Authenticator App you prefer\n </p>\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\"\n fill=\"#EC1C24\">\n </path>\n <path\n d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\"\n fill=\"#FFF\">\n </path>\n </svg>\n </a>\n Authy\n </span>\n <span>\n <a (click)=\"appTypeGoogle()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\"\n fill=\"#a0a0a0\">\n </path>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"></path>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"></path>\n </g>\n <path\n d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\"\n fill=\"#686868\">\n </path>\n <path\n d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\"\n fill=\"#c3c3c3\">\n </path>\n <path\n d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\"\n fill=\"#474747\">\n </path>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"></path>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"></path>\n </g>\n <path\n d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\"\n fill=\"#b0b0b0\">\n </path>\n <path\n d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\"\n fill=\"#939393\">\n </path>\n <path\n d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\"\n fill=\"#767676\">\n </path>\n <path\n d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\"\n fill=\"#bebebe\">\n </path>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n </div>\n }\n </div>\n }\n @if (mode === 'code-input') {\n <div\n class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n <app-code-input (codeChanged)=\"codeChanged($event)\"></app-code-input>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </div>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (appType) {\n @if (mode === 'qr-code') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n }\n @if (mode === 'code-input') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button>\n }\n }\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["ul{margin:0;padding-left:24px}fs-qrcode{display:flex;justify-content:center;margin:30px}app-code-input{margin-top:10px}.code-input{width:400px}mat-checkbox{overflow:hidden}.app-types{text-align:center;padding:0 40px}.app-types .row{display:flex;justify-content:center}.app-types .row span{display:flex;flex-direction:column;text-align:center;max-width:100px}.app-types .row span+span{margin-left:40px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$3.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FsQrcodeModule }, { kind: "component", type: i6.FsClipboardComponent, selector: "fs-qrcode", inputs: ["value", "width", "height"] }, { kind: "component", type: CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
166
149
  }
167
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: AppComponent, decorators: [{
168
151
  type: Component,
169
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Authenticator app setup\n </h1>\n <mat-dialog-content>\n <div\n *ngIf=\"mode === 'qr-code'\"\n class=\"qr-code\">\n <ng-container *ngIf=\"appType\">\n <ol>\n <li>\n <ng-container *ngIf=\"appType === 'authy'\">\n Install the Authy Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/authy/id494168017\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.authy.authy\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n </ng-container>\n <ng-container *ngIf=\"appType === 'google'\">\n Install the Google Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n </ng-container>\n </li>\n <ng-container *ngIf=\"appType === 'authy'\">\n <li>\n Open the Authy app and select\n <b>\n Add Account\n </b>\n .\n </li>\n <li>\n Select\n <b>\n Scan QR Code\n </b>\n and scan the QR code below.\n </li>\n </ng-container>\n <ng-container *ngIf=\"appType === 'google'\">\n <li>\n Open the Google Authentictor app and click the\n <b>\n Plus icon\n </b>\n in the lower right corner.\n </li>\n <li>\n Select\n <b>\n Scan a QR code\n </b>\n and scan the QR code below.\n </li>\n </ng-container>\n </ol>\n <ng-container *fsSkeleton=\"qrCodeUrl\">\n <fs-qrcode\n [value]=\"qrCodeUrl\"\n [width]=\"300\"\n [height]=\"300\">\n </fs-qrcode>\n </ng-container>\n </ng-container>\n <div\n class=\"app-types\"\n *ngIf=\"!appType\">\n <p>\n Select the Authenticator App you prefer\n </p>\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\"\n fill=\"#EC1C24\">\n </path>\n <path\n d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\"\n fill=\"#FFF\">\n </path>\n </svg>\n </a>\n Authy\n </span>\n <span>\n <a (click)=\"appTypeGoogle()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\"\n fill=\"#a0a0a0\">\n </path>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"></path>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"></path>\n </g>\n <path\n d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\"\n fill=\"#686868\">\n </path>\n <path\n d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\"\n fill=\"#c3c3c3\">\n </path>\n <path\n d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\"\n fill=\"#474747\">\n </path>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"></path>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"></path>\n </g>\n <path\n d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\"\n fill=\"#b0b0b0\">\n </path>\n <path\n d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\"\n fill=\"#939393\">\n </path>\n <path\n d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\"\n fill=\"#767676\">\n </path>\n <path\n d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\"\n fill=\"#bebebe\">\n </path>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n </div>\n </div>\n <div\n *ngIf=\"mode === 'code-input'\"\n class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n <app-code-input (codeChanged)=\"codeChanged($event)\"></app-code-input>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <ng-container *ngIf=\"appType\">\n <button\n *ngIf=\"mode === 'qr-code'\"\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n <button\n *ngIf=\"mode === 'code-input'\"\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button>\n </ng-container>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["ul{margin:0;padding-left:24px}fs-qrcode{display:flex;justify-content:center;margin:30px}app-code-input{margin-top:10px}.code-input{width:400px}mat-checkbox{overflow:hidden}.app-types{text-align:center;padding:0 40px}.app-types .row{display:flex;justify-content:center}.app-types .row span{display:flex;flex-direction:column;text-align:center;max-width:100px}.app-types .row span+span{margin-left:40px}\n"] }]
170
- }], ctorParameters: () => [{ type: undefined, decorators: [{
171
- type: Inject,
172
- args: [MAT_DIALOG_DATA]
173
- }] }, { type: i1.MatDialogRef }, { type: i0.ChangeDetectorRef }, { type: i2$1.FsMessage }], propDecorators: { form: [{
152
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
153
+ FormsModule,
154
+ FsFormModule,
155
+ FsDialogModule,
156
+ MatDialogTitle,
157
+ CdkScrollable,
158
+ MatDialogContent,
159
+ FsSkeletonModule,
160
+ FsQrcodeModule,
161
+ CodeInputComponent,
162
+ MatCheckbox,
163
+ MatDialogActions,
164
+ MatButton,
165
+ MatDialogClose,
166
+ ], template: "<form\n fsForm\n [submit]=\"verify\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Authenticator app setup\n </h1>\n <mat-dialog-content>\n @if (mode === 'qr-code') {\n <div\n class=\"qr-code\">\n @if (appType) {\n <ol>\n <li>\n @if (appType === 'authy') {\n Install the Authy Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/authy/id494168017\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.authy.authy\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n }\n @if (appType === 'google') {\n Install the Google Authenticator App from the\n <a\n href=\"https://apps.apple.com/us/app/google-authenticator/id388497605\"\n target=\"_blank\">\n App Store\n </a>\n or\n the\n <a\n href=\"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US&gl=US\"\n target=\"_blank\">\n Google Play Store\n </a>\n .\n }\n </li>\n @if (appType === 'authy') {\n <li>\n Open the Authy app and select\n <b>\n Add Account\n </b>\n .\n </li>\n <li>\n Select\n <b>\n Scan QR Code\n </b>\n and scan the QR code below.\n </li>\n }\n @if (appType === 'google') {\n <li>\n Open the Google Authentictor app and click the\n <b>\n Plus icon\n </b>\n in the lower right corner.\n </li>\n <li>\n Select\n <b>\n Scan a QR code\n </b>\n and scan the QR code below.\n </li>\n }\n </ol>\n <ng-container *fsSkeleton=\"qrCodeUrl\">\n <fs-qrcode\n [value]=\"qrCodeUrl\"\n [width]=\"300\"\n [height]=\"300\">\n </fs-qrcode>\n </ng-container>\n }\n @if (!appType) {\n <div\n class=\"app-types\"\n >\n <p>\n Select the Authenticator App you prefer\n </p>\n <div class=\"row\">\n <span>\n <a (click)=\"appTypeAuthy()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 256 256\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\">\n <path\n d=\"M256 127.998C256 198.696 198.694 256 127.997 256 57.304 256 0 198.696 0 127.998 0 57.305 57.304 0 127.997 0 198.694 0 256 57.305 256 127.998z\"\n fill=\"#EC1C24\">\n </path>\n <path\n d=\"M117.024 100.89l30.691 30.68c4.43 4.436 11.623 4.436 16.064 0 4.431-4.435 4.441-11.622 0-16.058L133.086 84.82C111.125 62.854 75.631 62.5 53.204 83.704a9.536 9.536 0 0 0-.605.548c-.098.098-.178.202-.275.29-.1.096-.202.182-.297.278-.194.193-.371.396-.54.597-21.215 22.437-20.85 57.932 1.113 79.897L83.292 196c4.44 4.433 11.623 4.433 16.062 0 4.442-4.437 4.442-11.633.011-16.06l-30.693-30.691c-13.398-13.393-13.488-35.129-.278-48.637 13.506-13.21 35.23-13.114 48.63.279zm39.612-40.873c-4.435 4.437-4.435 11.623.012 16.059l30.681 30.693c13.39 13.392 13.477 35.125.268 48.636-13.51 13.2-35.227 13.112-48.623-.282l-30.692-30.689c-4.438-4.437-11.633-4.437-16.066 0-4.443 4.433-4.443 11.642 0 16.065l30.682 30.694c21.968 21.965 57.458 22.322 79.889 1.116.208-.184.404-.355.61-.549.094-.095.182-.192.273-.29.1-.095.197-.183.29-.289.197-.183.365-.384.54-.594 21.215-22.428 20.86-57.911-1.102-79.889l-30.692-30.682c-4.436-4.443-11.638-4.443-16.07.001z\"\n fill=\"#FFF\">\n </path>\n </svg>\n </a>\n Authy\n </span>\n <span>\n <a (click)=\"appTypeGoogle()\">\n <svg\n width=\"50\"\n height=\"50\"\n viewBox=\"0 0 1024 1024\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"m457.07 45.92c73.67-8.62 149.41.22 218.93 26.24 62.75 23.47 120.59 60.41 167.72 108.09-40.31 39.97-80.25 80.31-120.51 120.33-25.95-25.45-56.19-46.65-89.47-61.37-44.22-19.82-93.39-28.54-141.72-25.2-54.6 3.52-108.11 22.49-152.63 54.3-55.24 38.95-96.61 97.22-114.8 162.35-13.64 47.78-14.77 98.97-3.76 147.4 8.85 39.61 26.09 77.29 50.05 110.03 22.24 30.45 50.3 56.64 82.22 76.71 36.79 23.24 78.76 38.22 121.96 43.48 37.02 4.65 74.9 2.23 111.05-7 3.97-1.91 6.24 2.61 8.73 4.86 40.74 40.95 81.68 81.7 122.43 122.63-73.31 35.6-155.99 51.86-237.3 46.12-68.05-4.51-135.07-24.08-194.71-57.18-24.87-13.6-48.23-29.82-70.33-47.54-17.46-14.81-34.71-30.01-49.72-47.35-25.41-27.39-47.21-58.11-65.17-90.87-4-7.72-8.64-15.12-11.9-23.2-4.47-9.05-8.37-18.36-12.25-27.67-4.96-13.27-10.26-26.44-13.88-40.15-.43-1.81-1.53-3.33-2.52-4.85-8.3-28.66-12.95-58.33-15.44-88.04-2.62-37.36-1.33-75.05 4.78-112.03 12.18-75.48 43.41-147.74 89.86-208.44 30.12-39.5 66.53-74.21 107.46-102.35 62.44-43.11 135.53-70.69 210.92-79.3m49.18 50.48c-5.7.99-10.96 3.76-15.38 7.43-10.4 8.93-14.14 24.81-8.17 37.28 6.33 15.02 25.16 23.1 40.36 17 15.43-5.24 24.78-23.51 19.74-39.06-4.1-15.43-20.92-25.79-36.55-22.65m-267.96 111.99c-5.33.28-10.59 1.92-15.16 4.68-11.47 7.03-17.88 21.74-14.36 34.86 3.09 14.08 16.78 25.06 31.26 24.61 15.03.41 29.08-11.39 31.54-26.17 2.24-10.33-1.61-21.55-9.14-28.85-6.24-6.33-15.3-9.62-24.14-9.13m-115.96 272c-6.62 1.23-12.84 4.58-17.54 9.4-9.45 9.72-11.72 25.57-5.02 37.42 7.16 13.96 25.48 20.86 39.98 14.62 15.02-5.51 23.99-23.42 19.06-38.71-4.04-15.41-20.86-25.96-36.48-22.73m111.98 272.05c-11.49 1.95-21.48 10.72-24.84 21.88-3.87 11.63-.13 25.16 8.9 33.36 6.15 5.48 14.4 8.7 22.67 8.32 11.16-.25 21.98-6.87 27.12-16.8 4.93-8.83 5.15-20.02.71-29.1-5.82-12.78-20.81-20.33-34.56-17.66m272.06 112.03c-11.76 2.02-21.92 11.07-25.09 22.6-3.87 12.57 1.13 27.25 11.91 34.79 7.86 5.79 18.42 7.67 27.77 4.86 9.61-2.77 17.7-10.24 21.07-19.68 4.97-12.74.36-28.32-10.58-36.46-7.02-5.45-16.35-7.67-25.08-6.11z\"\n fill=\"#a0a0a0\">\n </path>\n <g fill=\"#c1c1c1\">\n <path d=\"m506.25 96.4c15.63-3.14 32.45 7.22 36.55 22.65 5.04 15.55-4.31 33.82-19.74 39.06-15.2 6.1-34.03-1.98-40.36-17-5.97-12.47-2.23-28.35 8.17-37.28 4.42-3.67 9.68-6.44 15.38-7.43z\"></path>\n <path d=\"m122.33 480.39c15.62-3.23 32.44 7.32 36.48 22.73 4.93 15.29-4.04 33.2-19.06 38.71-14.5 6.24-32.82-.66-39.98-14.62-6.7-11.85-4.43-27.7 5.02-37.42 4.7-4.82 10.92-8.17 17.54-9.4z\"></path>\n </g>\n <path\n d=\"m843.72 180.25.11-.11c24.64 25.12 46.96 52.6 65.61 82.47 36.01 57.16 59.38 122.22 67.87 189.25 5.67 44.88 5.27 90.6-2.05 135.27-12.7 80.01-46.94 156.41-97.9 219.36-42.3 52.48-95.87 96.04-156.41 125.76l-.63-.26c-1.01-1.1-2.03-2.16-3.05-3.22-40.75-40.93-81.69-81.68-122.43-122.63-2.49-2.25-4.76-6.77-8.73-4.86-36.15 9.23-74.03 11.65-111.05 7-43.2-5.26-85.17-20.24-121.96-43.48-31.92-20.07-59.98-46.26-82.22-76.71-23.96-32.74-41.2-70.42-50.05-110.03-11.01-48.43-9.88-99.62 3.76-147.4 18.19-65.13 59.56-123.4 114.8-162.35 44.52-31.81 98.03-50.78 152.63-54.3 48.33-3.34 97.5 5.38 141.72 25.2 33.28 14.72 63.52 35.92 89.47 61.37 40.26-40.02 80.2-80.36 120.51-120.33m-351.75 183.97c-21.23 2.85-41.89 10.28-59.88 21.94-23.08 14.45-41.76 35.58-53.9 59.91-14.58 29.2-18.64 63.21-12.5 95.17 3.93 19.85 12.03 38.88 23.56 55.51 7.93 11.52 17.65 21.66 27.65 31.38 57.33 57.41 114.61 114.86 171.99 172.21 49.09-13.07 94.67-38.94 131.05-74.4 45.11-43.34 75.66-101.44 86.31-163.06.24-1.04.22-2.91 1.85-2.6 29.63.04 59.26-.01 88.9.05 19.04-.3 36.87-14.77 40.76-33.46.22-1.21 0-2.32-.67-3.35 1.22-5.71 2.08-11.58 1.38-17.43l-.24.4c-2.05-20.34-20.84-37.12-41.25-37.17-80.64-.07-161.28-.01-241.93-.07-6.44-22.08-18.5-42.33-34.03-59.23-25.8-27.5-62.26-45.01-100.02-46.82-9.68.02-19.44-.54-29.03 1.02m286.37 388.31c-12.64 2.06-23.37 12.59-25.7 25.18-1.48 8.14-.14 17.02 4.73 23.85 5.76 9.2 16.8 14.76 27.61 14.25 8.32.03 16.28-3.95 22.16-9.66 4.87-5.6 8.45-12.67 8.67-20.2.86-11.37-5.06-23.1-14.87-28.96-6.52-4.46-14.89-5.75-22.6-4.46z\"\n fill=\"#686868\">\n </path>\n <path\n d=\"m238.29 208.39c8.84-.49 17.9 2.8 24.14 9.13 7.53 7.3 11.38 18.52 9.14 28.85-2.46 14.78-16.51 26.58-31.54 26.17-14.48.45-28.17-10.53-31.26-24.61-3.52-13.12 2.89-27.83 14.36-34.86 4.57-2.76 9.83-4.4 15.16-4.68z\"\n fill=\"#c3c3c3\">\n </path>\n <path\n d=\"m491.97 364.22c9.59-1.56 19.35-1 29.03-1.02 37.76 1.81 74.22 19.32 100.02 46.82 15.53 16.9 27.59 37.15 34.03 59.23-47.67-.01-95.35-.01-143.03-.01-12.19-.11-24.23 5.42-32.21 14.61-6.01 6.85-9.74 15.65-10.44 24.74-1.19 14.17 5.36 28.7 16.69 37.28 7.62 5.91 17.28 9 26.92 8.8 126.69-.04 253.39-.06 380.08.03 4.76.04 9.59-.15 14.2-1.48 14.21-3.82 26.02-15.47 29.83-29.7.67 1.03.89 2.14.67 3.35-3.89 18.69-21.72 33.16-40.76 33.46-29.64-.06-59.27-.01-88.9-.05-1.63-.31-1.61 1.56-1.85 2.6-10.65 61.62-41.2 119.72-86.31 163.06-36.38 35.46-81.96 61.33-131.05 74.4-57.38-57.35-114.66-114.8-171.99-172.21-10-9.72-19.72-19.86-27.65-31.38-11.53-16.63-19.63-35.66-23.56-55.51-6.14-31.96-2.08-65.97 12.5-95.17 12.14-24.33 30.82-45.46 53.9-59.91 17.99-11.66 38.65-19.09 59.88-21.94z\"\n fill=\"#474747\">\n </path>\n <g fill=\"#bfbfbf\">\n <path d=\"m479.81 483.85c7.98-9.19 20.02-14.72 32.21-14.61 47.68 0 95.36 0 143.03.01 80.65.06 161.29 0 241.93.07 20.41.05 39.2 16.83 41.25 37.17-.19.33-.58.97-.78 1.29-3.68-18.51-21.57-33.16-40.47-33.05-124.97.1-249.94.12-374.91.17-7.73.13-15.74-.8-23.15 1.96-9.06 2.84-16.73 9.1-22.27 16.7-3.34 4.55-4.39 10.24-7.28 15.03.7-9.09 4.43-17.89 10.44-24.74z\"></path>\n <path d=\"m234.31 752.44c13.75-2.67 28.74 4.88 34.56 17.66 4.44 9.08 4.22 20.27-.71 29.1-5.14 9.93-15.96 16.55-27.12 16.8-8.27.38-16.52-2.84-22.67-8.32-9.03-8.2-12.77-21.73-8.9-33.36 3.36-11.16 13.35-19.93 24.84-21.88z\"></path>\n </g>\n <path\n d=\"m498.92 476.86c7.41-2.76 15.42-1.83 23.15-1.96 124.97-.05 249.94-.07 374.91-.17 18.9-.11 36.79 14.54 40.47 33.05.2-.32.59-.96.78-1.29l.24-.4c.7 5.85-.16 11.72-1.38 17.43-3.81 14.23-15.62 25.88-29.83 29.7-4.61 1.33-9.44 1.52-14.2 1.48-126.69-.09-253.39-.07-380.08-.03-9.64.2-19.3-2.89-26.92-8.8-11.33-8.58-17.88-23.11-16.69-37.28 2.89-4.79 3.94-10.48 7.28-15.03 5.54-7.6 13.21-13.86 22.27-16.7z\"\n fill=\"#b0b0b0\">\n </path>\n <path\n d=\"m59.49 636.08c.99 1.52 2.09 3.04 2.52 4.85 3.62 13.71 8.92 26.88 13.88 40.15 3.88 9.31 7.78 18.62 12.25 27.67 3.26 8.08 7.9 15.48 11.9 23.2 17.96 32.76 39.76 63.48 65.17 90.87 15.01 17.34 32.26 32.54 49.72 47.35 22.1 17.72 45.46 33.94 70.33 47.54 59.64 33.1 126.66 52.67 194.71 57.18 81.31 5.74 163.99-10.52 237.3-46.12 1.02 1.06 2.04 2.12 3.05 3.22l.03.61c-42.32 21.03-87.88 35.53-134.56 42.91-56.91 8.9-115.46 7.49-171.82-4.5-67.89-14.35-132.42-44.21-187.42-86.51-63.52-48.63-114.32-113.73-145.86-187.27-8.42-19.87-15.93-40.22-21.2-61.15z\"\n fill=\"#939393\">\n </path>\n <path\n d=\"m778.34 752.53c7.71-1.29 16.08 0 22.6 4.46 9.81 5.86 15.73 17.59 14.87 28.96-.22 7.53-3.8 14.6-8.67 20.2-5.88 5.71-13.84 9.69-22.16 9.66-10.81.51-21.85-5.05-27.61-14.25-4.87-6.83-6.21-15.71-4.73-23.85 2.33-12.59 13.06-23.12 25.7-25.18z\"\n fill=\"#767676\">\n </path>\n <path\n d=\"m506.37 864.47c8.73-1.56 18.06.66 25.08 6.11 10.94 8.14 15.55 23.72 10.58 36.46-3.37 9.44-11.46 16.91-21.07 19.68-9.35 2.81-19.91.93-27.77-4.86-10.78-7.54-15.78-22.22-11.91-34.79 3.17-11.53 13.33-20.58 25.09-22.6z\"\n fill=\"#bebebe\">\n </path>\n </svg>\n </a>\n Google Authenticator\n </span>\n </div>\n </div>\n }\n </div>\n }\n @if (mode === 'code-input') {\n <div\n class=\"code-input\">\n <div>\n Enter the 6-digit code you see in the App.\n </div>\n <app-code-input (codeChanged)=\"codeChanged($event)\"></app-code-input>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </div>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n @if (appType) {\n @if (mode === 'qr-code') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Next\n </button>\n }\n @if (mode === 'code-input') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\"\n (click)=\"next()\">\n Verify\n </button>\n }\n }\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: ["ul{margin:0;padding-left:24px}fs-qrcode{display:flex;justify-content:center;margin:30px}app-code-input{margin-top:10px}.code-input{width:400px}mat-checkbox{overflow:hidden}.app-types{text-align:center;padding:0 40px}.app-types .row{display:flex;justify-content:center}.app-types .row span{display:flex;flex-direction:column;text-align:center;max-width:100px}.app-types .row span+span{margin-left:40px}\n"] }]
167
+ }], propDecorators: { form: [{
174
168
  type: ViewChild,
175
169
  args: [FsFormDirective]
176
170
  }] } });
177
171
 
178
172
  class Fs2faVerificationCodeComponent {
179
- _form;
173
+ _form = inject(FsFormDirective);
180
174
  codeInputComponent;
181
175
  type;
182
176
  recipient;
@@ -185,9 +179,6 @@ class Fs2faVerificationCodeComponent {
185
179
  codeChange = new EventEmitter();
186
180
  codeComplete = new EventEmitter();
187
181
  VerificationMethodType = VerificationMethodType;
188
- constructor(_form) {
189
- this._form = _form;
190
- }
191
182
  codeCompleted(code) {
192
183
  this.code = code;
193
184
  this.codeChange.emit(this.code);
@@ -201,8 +192,8 @@ class Fs2faVerificationCodeComponent {
201
192
  focus() {
202
193
  this.codeInputComponent.focus();
203
194
  }
204
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationCodeComponent, deps: [{ token: i10.FsFormDirective }], target: i0.ɵɵFactoryTarget.Component });
205
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faVerificationCodeComponent, selector: "fs-2fa-verification-code", inputs: { type: "type", recipient: "recipient", codeLength: "codeLength", code: "code" }, outputs: { codeChange: "codeChange", codeComplete: "codeComplete" }, viewQueries: [{ propertyName: "codeInputComponent", first: true, predicate: CodeInputComponent, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"type === VerificationMethodType.Sms\">\n <p class=\"description\">\n A text message with a verification code was just sent to\n <span style=\"white-space: nowrap;\">\n {{ recipient }}\n </span>\n to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"type === VerificationMethodType.Email\">\n <p class=\"description\">\n An email with a verification code was just sent to {{ recipient }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"type === VerificationMethodType.App\">\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-template #input>\n <app-code-input\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted($event)\">\n </app-code-input>\n</ng-template>", styles: ["mat-form-field{width:100%}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper{min-height:unset!important}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper .fs-form-error{padding-bottom:5px}.description{text-align:center}app-code-input{margin:20px auto 0;display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }], viewProviders: [
195
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
196
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: Fs2faVerificationCodeComponent, isStandalone: true, selector: "fs-2fa-verification-code", inputs: { type: "type", recipient: "recipient", codeLength: "codeLength", code: "code" }, outputs: { codeChange: "codeChange", codeComplete: "codeComplete" }, viewQueries: [{ propertyName: "codeInputComponent", first: true, predicate: CodeInputComponent, descendants: true }], ngImport: i0, template: "@if (type === VerificationMethodType.Sms) {\n <p class=\"description\">\n A text message with a verification code was just sent to\n <span style=\"white-space: nowrap;\">\n {{ recipient }}\n </span>\n to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n@if (type === VerificationMethodType.Email) {\n <p class=\"description\">\n An email with a verification code was just sent to {{ recipient }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n@if (type === VerificationMethodType.App) {\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n<ng-template #input>\n <app-code-input\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted($event)\">\n </app-code-input>\n</ng-template>", styles: ["mat-form-field{width:100%}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper{min-height:unset!important}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper .fs-form-error{padding-bottom:5px}.description{text-align:center}app-code-input{margin:20px auto 0;display:block}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CodeInputComponent, selector: "app-code-input", inputs: ["codeLength", "code"], outputs: ["codeCompleted", "codeChanged"] }], viewProviders: [
206
197
  {
207
198
  provide: ControlContainer,
208
199
  useExisting: NgForm,
@@ -216,8 +207,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
216
207
  provide: ControlContainer,
217
208
  useExisting: NgForm,
218
209
  },
219
- ], template: "<ng-container *ngIf=\"type === VerificationMethodType.Sms\">\n <p class=\"description\">\n A text message with a verification code was just sent to\n <span style=\"white-space: nowrap;\">\n {{ recipient }}\n </span>\n to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"type === VerificationMethodType.Email\">\n <p class=\"description\">\n An email with a verification code was just sent to {{ recipient }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"type === VerificationMethodType.App\">\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n</ng-container>\n<ng-template #input>\n <app-code-input\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted($event)\">\n </app-code-input>\n</ng-template>", styles: ["mat-form-field{width:100%}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper{min-height:unset!important}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper .fs-form-error{padding-bottom:5px}.description{text-align:center}app-code-input{margin:20px auto 0;display:block}\n"] }]
220
- }], ctorParameters: () => [{ type: i10.FsFormDirective }], propDecorators: { codeInputComponent: [{
210
+ ], standalone: true, imports: [NgTemplateOutlet, CodeInputComponent], template: "@if (type === VerificationMethodType.Sms) {\n <p class=\"description\">\n A text message with a verification code was just sent to\n <span style=\"white-space: nowrap;\">\n {{ recipient }}\n </span>\n to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n@if (type === VerificationMethodType.Email) {\n <p class=\"description\">\n An email with a verification code was just sent to {{ recipient }} to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n@if (type === VerificationMethodType.App) {\n <p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator app to verify it's you.\n </p>\n <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n}\n<ng-template #input>\n <app-code-input\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted($event)\">\n </app-code-input>\n</ng-template>", styles: ["mat-form-field{width:100%}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper{min-height:unset!important}mat-form-field ::ng-deep .mat-form-field-subscript-wrapper .fs-form-error{padding-bottom:5px}.description{text-align:center}app-code-input{margin:20px auto 0;display:block}\n"] }]
211
+ }], propDecorators: { codeInputComponent: [{
221
212
  type: ViewChild,
222
213
  args: [CodeInputComponent]
223
214
  }], type: [{
@@ -235,17 +226,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
235
226
  }] } });
236
227
 
237
228
  class Fs2faVerificationMethodsComponent {
238
- _dialogData;
239
- _dialogRef;
229
+ _dialogData = inject(MAT_DIALOG_DATA);
230
+ _dialogRef = inject(MatDialogRef);
240
231
  verificationMethod;
241
232
  phone;
242
233
  code;
243
234
  verificationMethods;
244
235
  verificationMethodType = VerificationMethodType;
245
236
  _selectVerificationMethod;
246
- constructor(_dialogData, _dialogRef) {
247
- this._dialogData = _dialogData;
248
- this._dialogRef = _dialogRef;
237
+ constructor() {
238
+ const _dialogData = this._dialogData;
249
239
  this._selectVerificationMethod = _dialogData.selectVerificationMethod;
250
240
  this._setActiveMethod();
251
241
  this._initMethods(_dialogData.verificationMethods);
@@ -272,21 +262,32 @@ class Fs2faVerificationMethodsComponent {
272
262
  return acc;
273
263
  }, {});
274
264
  }
275
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
276
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faVerificationMethodsComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification methods\n </h1>\n <form\n fsForm\n [submit]=\"setVerificationMethod\"\n [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container>\n <fs-radio-group\n [(ngModel)]=\"verificationMethod\"\n name=\"method\"\n [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of verificationMethods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Text message\n </div>\n <div class=\"method-subtitle\">\n Send verification code to a mobile number\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Email\n </div>\n <div class=\"method-subtitle\">\n Send verification code to an email address\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Authenticator app\n </div>\n <div class=\"method-subtitle\">\n Send verification code to your authenticator app\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n <mat-radio-button\n class=\"method-item\"\n *ngFor=\"let method of methodMap.value\"\n [value]=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n {{ method.phoneNumber }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n {{ method.email }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n Authenticator App\n </ng-container>\n </ng-container>\n </mat-radio-button>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i8$1.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "label", "name", "disabled", "radioPosition", "compareWith", "required"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
265
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
266
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: Fs2faVerificationMethodsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification methods\n </h1>\n <form\n fsForm\n [submit]=\"setVerificationMethod\"\n [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container>\n <fs-radio-group\n [(ngModel)]=\"verificationMethod\"\n name=\"method\"\n [compareWith]=\"compareWith\">\n @for (methodMap of verificationMethods | keyvalue; track methodMap) {\n <div class=\"method\">\n @switch (methodMap.key) {\n @case (verificationMethodType.Sms) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Text message\n </div>\n <div class=\"method-subtitle\">\n Send verification code to a mobile number\n </div>\n </div>\n </div>\n }\n @case (verificationMethodType.Email) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Email\n </div>\n <div class=\"method-subtitle\">\n Send verification code to an email address\n </div>\n </div>\n </div>\n }\n @case (verificationMethodType.App) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Authenticator app\n </div>\n <div class=\"method-subtitle\">\n Send verification code to your authenticator app\n </div>\n </div>\n </div>\n }\n }\n @for (method of methodMap.value; track method) {\n <mat-radio-button\n class=\"method-item\"\n [value]=\"method\">\n @switch (methodMap.key) {\n @case (verificationMethodType.Sms) {\n {{ method.phoneNumber }}\n }\n @case (verificationMethodType.Email) {\n {{ method.email }}\n }\n @case (verificationMethodType.App) {\n Authenticator App\n }\n }\n </mat-radio-button>\n }\n </div>\n }\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"], dependencies: [{ kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsRadioGroupModule }, { kind: "component", type: i5.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "label", "name", "disabled", "radioPosition", "compareWith", "required"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
277
267
  }
278
268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsComponent, decorators: [{
279
269
  type: Component,
280
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification methods\n </h1>\n <form\n fsForm\n [submit]=\"setVerificationMethod\"\n [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container>\n <fs-radio-group\n [(ngModel)]=\"verificationMethod\"\n name=\"method\"\n [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of verificationMethods | keyvalue\">\n <div class=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Text message\n </div>\n <div class=\"method-subtitle\">\n Send verification code to a mobile number\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Email\n </div>\n <div class=\"method-subtitle\">\n Send verification code to an email address\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Authenticator app\n </div>\n <div class=\"method-subtitle\">\n Send verification code to your authenticator app\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n <mat-radio-button\n class=\"method-item\"\n *ngFor=\"let method of methodMap.value\"\n [value]=\"method\">\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n {{ method.phoneNumber }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n {{ method.email }}\n </ng-container>\n <ng-container *ngSwitchCase=\"verificationMethodType.App\">\n Authenticator App\n </ng-container>\n </ng-container>\n </mat-radio-button>\n </div>\n </ng-container>\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"] }]
281
- }], ctorParameters: () => [{ type: undefined, decorators: [{
282
- type: Inject,
283
- args: [MAT_DIALOG_DATA]
284
- }] }, { type: i1.MatDialogRef }] });
270
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
271
+ FsDialogModule,
272
+ MatDialogTitle,
273
+ FormsModule,
274
+ FsFormModule,
275
+ CdkScrollable,
276
+ MatDialogContent,
277
+ FsRadioGroupModule,
278
+ MatIcon,
279
+ MatRadioButton,
280
+ MatDialogActions,
281
+ MatButton,
282
+ MatDialogClose,
283
+ KeyValuePipe,
284
+ ], template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification methods\n </h1>\n <form\n fsForm\n [submit]=\"setVerificationMethod\"\n [dirtySubmitButton]=\"false\">\n <mat-dialog-content>\n <ng-container>\n <fs-radio-group\n [(ngModel)]=\"verificationMethod\"\n name=\"method\"\n [compareWith]=\"compareWith\">\n @for (methodMap of verificationMethods | keyvalue; track methodMap) {\n <div class=\"method\">\n @switch (methodMap.key) {\n @case (verificationMethodType.Sms) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n textsms\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Text message\n </div>\n <div class=\"method-subtitle\">\n Send verification code to a mobile number\n </div>\n </div>\n </div>\n }\n @case (verificationMethodType.Email) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n mail\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Email\n </div>\n <div class=\"method-subtitle\">\n Send verification code to an email address\n </div>\n </div>\n </div>\n }\n @case (verificationMethodType.App) {\n <div class=\"method-header\">\n <div class=\"method-icon\">\n <mat-icon>\n phone_iphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">\n Authenticator app\n </div>\n <div class=\"method-subtitle\">\n Send verification code to your authenticator app\n </div>\n </div>\n </div>\n }\n }\n @for (method of methodMap.value; track method) {\n <mat-radio-button\n class=\"method-item\"\n [value]=\"method\">\n @switch (methodMap.key) {\n @case (verificationMethodType.Sms) {\n {{ method.phoneNumber }}\n }\n @case (verificationMethodType.Email) {\n {{ method.email }}\n }\n @case (verificationMethodType.App) {\n Authenticator App\n }\n }\n </mat-radio-button>\n }\n </div>\n }\n </fs-radio-group>\n </ng-container>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"actions\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>", styles: [".method{display:block;margin-bottom:20px}.method .method-header{display:flex;align-items:flex-start}.method .method-header .method-name{margin-left:10px}.method .method-header .method-name .method-title{font-size:14px;font-weight:400}.method .method-header .method-name .method-subtitle{font-size:12px;color:#a3a3a3}.method .method-item{display:block;margin:10px 0 0 35px}\n"] }]
285
+ }], ctorParameters: () => [] });
285
286
 
286
287
  class Fs2faVerificationComponent {
287
- _cdRef;
288
- _dialog;
289
- _message;
288
+ _cdRef = inject(ChangeDetectorRef);
289
+ _dialog = inject(FsDialog);
290
+ _message = inject(FsMessage);
290
291
  verificationCodeComponent;
291
292
  verificationMethod;
292
293
  resend;
@@ -304,11 +305,6 @@ class Fs2faVerificationComponent {
304
305
  trustDeviceChange = new EventEmitter();
305
306
  VerificationMethodType = VerificationMethodType;
306
307
  _destroy$ = new Subject();
307
- constructor(_cdRef, _dialog, _message) {
308
- this._cdRef = _cdRef;
309
- this._dialog = _dialog;
310
- this._message = _message;
311
- }
312
308
  get recipient() {
313
309
  if (this.verificationMethod.type === VerificationMethodType.Email) {
314
310
  return this.verificationMethod.email;
@@ -364,13 +360,19 @@ class Fs2faVerificationComponent {
364
360
  });
365
361
  });
366
362
  }
367
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i9.FsDialog }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
368
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: { verificationMethod: "verificationMethod", resend: "resend", showTrustedDevice: "showTrustedDevice", trustDevice: "trustDevice", codeLength: "codeLength", trustDays: "trustDays", code: "code", formatRecipient: "formatRecipient", getVerificationMethods: "getVerificationMethods", selectVerificationMethod: "selectVerificationMethod" }, outputs: { verified: "verified", codeChange: "codeChange", codeCompleted: "codeCompleted", trustDeviceChange: "trustDeviceChange" }, viewQueries: [{ propertyName: "verificationCodeComponent", first: true, predicate: Fs2faVerificationCodeComponent, descendants: true }], ngImport: i0, template: "<div class=\"code-container\">\n <fs-2fa-verification-code\n [recipient]=\"(formatRecipient && verificationMethod.type === VerificationMethodType.Sms) ? (recipient | fsPhone) : recipient\"\n [type]=\"verificationMethod.type\"\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChange)=\"codeChanged($event)\"\n (codeComplete)=\"codeComplete($event)\">\n </fs-2fa-verification-code>\n</div>\n<div class=\"additional\">\n <div\n class=\"trust-device\"\n *ngIf=\"showTrustedDevice\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustDevice\"\n (ngModelChange)=\"trustDeviceChange.emit($event)\">\n <div class=\"small\">\n Bypass 2-step verification\n <ng-container *ngIf=\"trustDays\">\n for {{ trustDays }} days\n </ng-container>\n <ng-container *ngIf=\"!trustDays\">\n for future signins\n </ng-container>\n </div>\n </mat-checkbox>\n </div>\n</div>", styles: [":host ::ng-deep .mat-checkbox{margin:2px 0}:host ::ng-deep .mat-checkbox .mat-checkbox-label{line-height:normal}:host ::ng-deep .mat-checkbox .mat-checkbox-layout{white-space:normal}.code-container{display:block}.additional{display:flex;justify-content:space-between;align-items:center;margin:4px 0 10px}.additional small{color:inherit}.additional .resend{cursor:pointer;text-transform:none}.additional .resend mat-spinner{display:inline-block;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i10.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: Fs2faVerificationCodeComponent, selector: "fs-2fa-verification-code", inputs: ["type", "recipient", "codeLength", "code"], outputs: ["codeChange", "codeComplete"] }, { kind: "pipe", type: i8$2.FsPhonePipe, name: "fsPhone" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
363
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
364
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: Fs2faVerificationComponent, isStandalone: true, selector: "fs-2fa-verification", inputs: { verificationMethod: "verificationMethod", resend: "resend", showTrustedDevice: "showTrustedDevice", trustDevice: "trustDevice", codeLength: "codeLength", trustDays: "trustDays", code: "code", formatRecipient: "formatRecipient", getVerificationMethods: "getVerificationMethods", selectVerificationMethod: "selectVerificationMethod" }, outputs: { verified: "verified", codeChange: "codeChange", codeCompleted: "codeCompleted", trustDeviceChange: "trustDeviceChange" }, viewQueries: [{ propertyName: "verificationCodeComponent", first: true, predicate: Fs2faVerificationCodeComponent, descendants: true }], ngImport: i0, template: "<div class=\"code-container\">\n <fs-2fa-verification-code\n [recipient]=\"(formatRecipient && verificationMethod.type === VerificationMethodType.Sms) ? (recipient | fsPhone) : recipient\"\n [type]=\"verificationMethod.type\"\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChange)=\"codeChanged($event)\"\n (codeComplete)=\"codeComplete($event)\">\n </fs-2fa-verification-code>\n</div>\n<div class=\"additional\">\n @if (showTrustedDevice) {\n <div\n class=\"trust-device\"\n >\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustDevice\"\n (ngModelChange)=\"trustDeviceChange.emit($event)\">\n <div class=\"small\">\n Bypass 2-step verification\n @if (trustDays) {\n for {{ trustDays }} days\n }\n @if (!trustDays) {\n for future signins\n }\n </div>\n </mat-checkbox>\n </div>\n }\n</div>", styles: [":host ::ng-deep .mat-checkbox{margin:2px 0}:host ::ng-deep .mat-checkbox .mat-checkbox-label{line-height:normal}:host ::ng-deep .mat-checkbox .mat-checkbox-layout{white-space:normal}.code-container{display:block}.additional{display:flex;justify-content:space-between;align-items:center;margin:4px 0 10px}.additional small{color:inherit}.additional .resend{cursor:pointer;text-transform:none}.additional .resend mat-spinner{display:inline-block;vertical-align:middle}\n"], dependencies: [{ kind: "component", type: Fs2faVerificationCodeComponent, selector: "fs-2fa-verification-code", inputs: ["type", "recipient", "codeLength", "code"], outputs: ["codeChange", "codeComplete"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "ngmodule", type: FsPhoneModule }, { kind: "pipe", type: i3.FsPhonePipe, name: "fsPhone" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
369
365
  }
370
366
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationComponent, decorators: [{
371
367
  type: Component,
372
- args: [{ selector: 'fs-2fa-verification', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"code-container\">\n <fs-2fa-verification-code\n [recipient]=\"(formatRecipient && verificationMethod.type === VerificationMethodType.Sms) ? (recipient | fsPhone) : recipient\"\n [type]=\"verificationMethod.type\"\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChange)=\"codeChanged($event)\"\n (codeComplete)=\"codeComplete($event)\">\n </fs-2fa-verification-code>\n</div>\n<div class=\"additional\">\n <div\n class=\"trust-device\"\n *ngIf=\"showTrustedDevice\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustDevice\"\n (ngModelChange)=\"trustDeviceChange.emit($event)\">\n <div class=\"small\">\n Bypass 2-step verification\n <ng-container *ngIf=\"trustDays\">\n for {{ trustDays }} days\n </ng-container>\n <ng-container *ngIf=\"!trustDays\">\n for future signins\n </ng-container>\n </div>\n </mat-checkbox>\n </div>\n</div>", styles: [":host ::ng-deep .mat-checkbox{margin:2px 0}:host ::ng-deep .mat-checkbox .mat-checkbox-label{line-height:normal}:host ::ng-deep .mat-checkbox .mat-checkbox-layout{white-space:normal}.code-container{display:block}.additional{display:flex;justify-content:space-between;align-items:center;margin:4px 0 10px}.additional small{color:inherit}.additional .resend{cursor:pointer;text-transform:none}.additional .resend mat-spinner{display:inline-block;vertical-align:middle}\n"] }]
373
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i9.FsDialog }, { type: i2$1.FsMessage }], propDecorators: { verificationCodeComponent: [{
368
+ args: [{ selector: 'fs-2fa-verification', changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], standalone: true, imports: [
369
+ Fs2faVerificationCodeComponent,
370
+ MatCheckbox,
371
+ FormsModule,
372
+ FsFormModule,
373
+ FsPhoneModule,
374
+ ], template: "<div class=\"code-container\">\n <fs-2fa-verification-code\n [recipient]=\"(formatRecipient && verificationMethod.type === VerificationMethodType.Sms) ? (recipient | fsPhone) : recipient\"\n [type]=\"verificationMethod.type\"\n [code]=\"code\"\n [codeLength]=\"codeLength\"\n (codeChange)=\"codeChanged($event)\"\n (codeComplete)=\"codeComplete($event)\">\n </fs-2fa-verification-code>\n</div>\n<div class=\"additional\">\n @if (showTrustedDevice) {\n <div\n class=\"trust-device\"\n >\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustDevice\"\n (ngModelChange)=\"trustDeviceChange.emit($event)\">\n <div class=\"small\">\n Bypass 2-step verification\n @if (trustDays) {\n for {{ trustDays }} days\n }\n @if (!trustDays) {\n for future signins\n }\n </div>\n </mat-checkbox>\n </div>\n }\n</div>", styles: [":host ::ng-deep .mat-checkbox{margin:2px 0}:host ::ng-deep .mat-checkbox .mat-checkbox-label{line-height:normal}:host ::ng-deep .mat-checkbox .mat-checkbox-layout{white-space:normal}.code-container{display:block}.additional{display:flex;justify-content:space-between;align-items:center;margin:4px 0 10px}.additional small{color:inherit}.additional .resend{cursor:pointer;text-transform:none}.additional .resend mat-spinner{display:inline-block;vertical-align:middle}\n"] }]
375
+ }], propDecorators: { verificationCodeComponent: [{
374
376
  type: ViewChild,
375
377
  args: [Fs2faVerificationCodeComponent]
376
378
  }], verificationMethod: [{
@@ -404,10 +406,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
404
406
  }] } });
405
407
 
406
408
  let EmailComponent$1 = class EmailComponent {
407
- _data;
408
- _dialogRef;
409
- _cdRef;
410
- _message;
409
+ _data = inject(MAT_DIALOG_DATA);
410
+ _dialogRef = inject(MatDialogRef);
411
+ _cdRef = inject(ChangeDetectorRef);
412
+ _message = inject(FsMessage);
411
413
  form;
412
414
  email;
413
415
  code;
@@ -415,11 +417,8 @@ let EmailComponent$1 = class EmailComponent {
415
417
  verificationMethod = null;
416
418
  trustDevice = true;
417
419
  twoFactorManageService;
418
- constructor(_data, _dialogRef, _cdRef, _message) {
419
- this._data = _data;
420
- this._dialogRef = _dialogRef;
421
- this._cdRef = _cdRef;
422
- this._message = _message;
420
+ constructor() {
421
+ const _data = this._data;
423
422
  this.twoFactorManageService = _data.twoFactorManageService;
424
423
  this.default = !this.twoFactorManageService.hasVerificationMethods;
425
424
  }
@@ -459,25 +458,37 @@ let EmailComponent$1 = class EmailComponent {
459
458
  }
460
459
  });
461
460
  }
462
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i0.ChangeDetectorRef }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
463
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: EmailComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n </ng-container>\n <ng-template #notVerificationMethod>\n <p>\n The app will only use this email for verifying your account security.\n </p>\n <mat-form-field>\n <mat-label>\n Email\n </mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}app-code-input{margin-bottom:5px;display:block}mat-checkbox{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i10.FsFormEmailDirective, selector: "[fsFormEmail]", inputs: ["fsFormEmail", "fsFormEmailMessage"] }, { kind: "directive", type: i10.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
461
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
462
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: EmailComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email setup\n </h1>\n <mat-dialog-content>\n @if (verificationMethod) {\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n } @else {\n <p>\n The app will only use this email for verifying your account security.\n </p>\n <mat-form-field>\n <mat-label>\n Email\n </mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}app-code-input{margin-bottom:5px;display:block}mat-checkbox{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i2.FsFormEmailDirective, selector: "[fsFormEmail]", inputs: ["fsFormEmail", "fsFormEmailMessage"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
464
463
  };
465
464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailComponent$1, decorators: [{
466
465
  type: Component,
467
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n </ng-container>\n <ng-template #notVerificationMethod>\n <p>\n The app will only use this email for verifying your account security.\n </p>\n <mat-form-field>\n <mat-label>\n Email\n </mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}app-code-input{margin-bottom:5px;display:block}mat-checkbox{overflow:hidden}\n"] }]
468
- }], ctorParameters: () => [{ type: undefined, decorators: [{
469
- type: Inject,
470
- args: [MAT_DIALOG_DATA]
471
- }] }, { type: i1.MatDialogRef }, { type: i0.ChangeDetectorRef }, { type: i2$1.FsMessage }], propDecorators: { form: [{
466
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
467
+ FormsModule,
468
+ FsFormModule,
469
+ FsDialogModule,
470
+ MatDialogTitle,
471
+ CdkScrollable,
472
+ MatDialogContent,
473
+ Fs2faVerificationComponent,
474
+ MatFormField,
475
+ MatLabel,
476
+ MatInput,
477
+ MatCheckbox,
478
+ MatDialogActions,
479
+ MatButton,
480
+ MatDialogClose,
481
+ ], template: "<form\n fsForm\n [submit]=\"submit\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Email setup\n </h1>\n <mat-dialog-content>\n @if (verificationMethod) {\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n } @else {\n <p>\n The app will only use this email for verifying your account security.\n </p>\n <mat-form-field>\n <mat-label>\n Email\n </mat-label>\n <input\n matInput\n [required]=\"true\"\n [(ngModel)]=\"email\"\n [fsFormEmail]=\"true\"\n name=\"email\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}app-code-input{margin-bottom:5px;display:block}mat-checkbox{overflow:hidden}\n"] }]
482
+ }], ctorParameters: () => [], propDecorators: { form: [{
472
483
  type: ViewChild,
473
484
  args: [FsFormDirective, { static: false }]
474
485
  }] } });
475
486
 
476
487
  class NumberComponent {
477
- _data;
478
- _dialogRef;
479
- _cdRef;
480
- _message;
488
+ _data = inject(MAT_DIALOG_DATA);
489
+ _dialogRef = inject(MatDialogRef);
490
+ _cdRef = inject(ChangeDetectorRef);
491
+ _message = inject(FsMessage);
481
492
  form;
482
493
  phone;
483
494
  code;
@@ -486,11 +497,8 @@ class NumberComponent {
486
497
  verificationMethod = null;
487
498
  defaultCountry;
488
499
  twoFactorManageService;
489
- constructor(_data, _dialogRef, _cdRef, _message) {
490
- this._data = _data;
491
- this._dialogRef = _dialogRef;
492
- this._cdRef = _cdRef;
493
- this._message = _message;
500
+ constructor() {
501
+ const _data = this._data;
494
502
  this.twoFactorManageService = _data.twoFactorManageService;
495
503
  this.defaultCountry = _data.defaultCountry;
496
504
  this.default = !this.twoFactorManageService.hasVerificationMethods;
@@ -533,22 +541,35 @@ class NumberComponent {
533
541
  }
534
542
  });
535
543
  }
536
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumberComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i0.ChangeDetectorRef }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
537
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: NumberComponent, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"submit\"\n [autocomplete]=\"false\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text message setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [formatRecipient]=\"true\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n </ng-container>\n <ng-template #notVerificationMethod>\n <p>\n The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.\n </p>\n <mat-form-field>\n <mat-label>\n Phone number\n </mat-label>\n <input\n matInput\n fsPhoneField\n [(ngModel)]=\"phone\"\n [required]=\"true\"\n [country]=\"defaultCountry\"\n [mode]=\"'object'\"\n autocomplete=\"off\"\n name=\"phone\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}app-code-input{margin-bottom:5px;display:block}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}mat-checkbox{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i10.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i8$2.FsPhoneFieldComponent, selector: "[fsPhoneField]", inputs: ["allowNumberExt", "placeholder", "required", "disabled", "mode", "country", "autocomplete"] }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
544
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
545
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: NumberComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "form", first: true, predicate: FsFormDirective, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"submit\"\n [autocomplete]=\"false\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text message setup\n </h1>\n <mat-dialog-content>\n @if (verificationMethod) {\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [formatRecipient]=\"true\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n } @else {\n <p>\n The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.\n </p>\n <mat-form-field>\n <mat-label>\n Phone number\n </mat-label>\n <input\n matInput\n fsPhoneField\n [(ngModel)]=\"phone\"\n [required]=\"true\"\n [country]=\"defaultCountry\"\n [mode]=\"'object'\"\n autocomplete=\"off\"\n name=\"phone\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}app-code-input{margin-bottom:5px;display:block}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}mat-checkbox{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsFormRequiredDirective, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }, { kind: "directive", type: i2.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FsPhoneModule }, { kind: "component", type: i3.FsPhoneFieldComponent, selector: "[fsPhoneField]", inputs: ["allowNumberExt", "placeholder", "required", "disabled", "mode", "country", "autocomplete"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
538
546
  }
539
547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumberComponent, decorators: [{
540
548
  type: Component,
541
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"submit\"\n [autocomplete]=\"false\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text message setup\n </h1>\n <mat-dialog-content>\n <ng-container *ngIf=\"verificationMethod; else notVerificationMethod\">\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [formatRecipient]=\"true\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n </ng-container>\n <ng-template #notVerificationMethod>\n <p>\n The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.\n </p>\n <mat-form-field>\n <mat-label>\n Phone number\n </mat-label>\n <input\n matInput\n fsPhoneField\n [(ngModel)]=\"phone\"\n [required]=\"true\"\n [country]=\"defaultCountry\"\n [mode]=\"'object'\"\n autocomplete=\"off\"\n name=\"phone\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n </ng-template>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}app-code-input{margin-bottom:5px;display:block}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}mat-checkbox{overflow:hidden}\n"] }]
542
- }], ctorParameters: () => [{ type: undefined, decorators: [{
543
- type: Inject,
544
- args: [MAT_DIALOG_DATA]
545
- }] }, { type: i1.MatDialogRef }, { type: i0.ChangeDetectorRef }, { type: i2$1.FsMessage }], propDecorators: { form: [{
549
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
550
+ FormsModule,
551
+ FsFormModule,
552
+ FsDialogModule,
553
+ MatDialogTitle,
554
+ CdkScrollable,
555
+ MatDialogContent,
556
+ Fs2faVerificationComponent,
557
+ MatFormField,
558
+ MatLabel,
559
+ MatInput,
560
+ FsPhoneModule,
561
+ MatCheckbox,
562
+ MatDialogActions,
563
+ MatButton,
564
+ MatDialogClose,
565
+ ], template: "<form\n fsForm\n [submit]=\"submit\"\n [autocomplete]=\"false\">\n <fs-dialog>\n <h1 mat-dialog-title>\n Text message setup\n </h1>\n <mat-dialog-content>\n @if (verificationMethod) {\n <fs-2fa-verification\n [verificationMethod]=\"verificationMethod\"\n [(code)]=\"code\"\n (codeCompleted)=\"codeCompleted($event)\"\n [resend]=\"resend\"\n [formatRecipient]=\"true\"\n [(trustDevice)]=\"trustDevice\">\n </fs-2fa-verification>\n } @else {\n <p>\n The app will only use this number for verifying your account security. Message and data rates may apply by your cell phone provider.\n </p>\n <mat-form-field>\n <mat-label>\n Phone number\n </mat-label>\n <input\n matInput\n fsPhoneField\n [(ngModel)]=\"phone\"\n [required]=\"true\"\n [country]=\"defaultCountry\"\n [mode]=\"'object'\"\n autocomplete=\"off\"\n name=\"phone\">\n </mat-form-field>\n <mat-checkbox\n name=\"default\"\n [(ngModel)]=\"default\"\n [disableRipple]=\"true\">\n Make this the default verification method\n </mat-checkbox>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"submit\">\n Next\n </button>\n <button\n mat-button\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Cancel\n </button>\n </mat-dialog-actions>\n </fs-dialog>\n</form>", styles: [":host ::ng-deep mat-checkbox .mat-ripple{display:none}:host ::ng-deep mat-checkbox .mat-checkbox-layout{white-space:wrap}app-code-input{margin-bottom:5px;display:block}mat-form-field{width:100%}mat-dialog-content{width:400px;max-width:100%}p{margin-top:0}mat-checkbox{overflow:hidden}\n"] }]
566
+ }], ctorParameters: () => [], propDecorators: { form: [{
546
567
  type: ViewChild,
547
568
  args: [FsFormDirective, { static: false }]
548
569
  }] } });
549
570
 
550
571
  class TwoFactorManageService {
551
- _dialog;
572
+ _dialog = inject(MatDialog);
552
573
  _destroy$ = new Subject();
553
574
  _verificationMethodsFetch;
554
575
  _verificationMethodCreate;
@@ -558,9 +579,6 @@ class TwoFactorManageService {
558
579
  _verificationMethodResend;
559
580
  _accountVerify;
560
581
  _verificationMethods$ = new BehaviorSubject([]);
561
- constructor(_dialog) {
562
- this._dialog = _dialog;
563
- }
564
582
  get verificationMethods$() {
565
583
  return this._verificationMethods$
566
584
  .pipe(takeUntil(this._destroy$));
@@ -702,24 +720,24 @@ class TwoFactorManageService {
702
720
  this.verificationMethodsFetch();
703
721
  }), takeUntil(this._destroy$));
704
722
  }
705
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TwoFactorManageService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
723
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TwoFactorManageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
706
724
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TwoFactorManageService });
707
725
  }
708
726
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TwoFactorManageService, decorators: [{
709
727
  type: Injectable
710
- }], ctorParameters: () => [{ type: i1.MatDialog }] });
728
+ }] });
711
729
 
712
730
  class DefaultedComponent {
713
731
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefaultedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
714
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: DefaultedComponent, selector: "app-defaulted", ngImport: i0, template: "<fs-chip [backgroundColor]=\"'#02A7F0'\" [size]=\"'tiny'\">Default</fs-chip>", styles: [":host{display:flex}\n"], dependencies: [{ kind: "component", type: i1$1.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "actionable", "value", "maxWidth", "actions", "icon", "image", "selected", "size", "backgroundColor", "borderColor", "color", "outlined"], outputs: ["selectedToggled", "removed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
732
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: DefaultedComponent, isStandalone: true, selector: "app-defaulted", ngImport: i0, template: "<fs-chip [backgroundColor]=\"'#02A7F0'\" [size]=\"'tiny'\">Default</fs-chip>", styles: [":host{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: FsChipModule }, { kind: "component", type: i1$4.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "actionable", "value", "maxWidth", "actions", "icon", "image", "selected", "size", "backgroundColor", "borderColor", "color", "outlined"], outputs: ["selectedToggled", "removed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
715
733
  }
716
734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefaultedComponent, decorators: [{
717
735
  type: Component,
718
- args: [{ selector: 'app-defaulted', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-chip [backgroundColor]=\"'#02A7F0'\" [size]=\"'tiny'\">Default</fs-chip>", styles: [":host{display:flex}\n"] }]
736
+ args: [{ selector: 'app-defaulted', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [FsChipModule], template: "<fs-chip [backgroundColor]=\"'#02A7F0'\" [size]=\"'tiny'\">Default</fs-chip>", styles: [":host{display:flex}\n"] }]
719
737
  }] });
720
738
 
721
739
  class VerificationMethodsComponent {
722
- _prompt;
740
+ _prompt = inject(FsPrompt);
723
741
  list;
724
742
  type;
725
743
  accountVerify;
@@ -730,9 +748,6 @@ class VerificationMethodsComponent {
730
748
  deleted = new EventEmitter();
731
749
  listConfig;
732
750
  VerificationMethodType = VerificationMethodType;
733
- constructor(_prompt) {
734
- this._prompt = _prompt;
735
- }
736
751
  ngOnInit() {
737
752
  if (!this.verificationMethodDefault && this.twoFactorManageService?.hasVerificationMethodDefault) {
738
753
  this.verificationMethodDefault = (verificationMethod) => {
@@ -805,13 +820,19 @@ class VerificationMethodsComponent {
805
820
  reload() {
806
821
  this.list.reload();
807
822
  }
808
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodsComponent, deps: [{ token: i1$2.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
809
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: { type: "type", accountVerify: "accountVerify", verificationMethodsFetch: "verificationMethodsFetch", verificationMethodDelete: "verificationMethodDelete", verificationMethodDefault: "verificationMethodDefault", twoFactorManageService: "twoFactorManageService" }, outputs: { deleted: "deleted" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-icon\" width=\"1%\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.type === VerificationMethodType.Sms\">\n <mat-icon>textsms</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.Email\">\n <mat-icon>email</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.App\">\n <mat-icon>phone_iphone</mat-icon>\n </ng-container>\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n <ng-container *ngIf=\"row.type === VerificationMethodType.Sms\">\n <div class=\"row\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country> \n <span>{{row.phoneNumber | fsPhone}}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.Email\">\n {{row.email}}\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.App\">\n App\n </ng-container>\n\n <app-defaulted *ngIf=\"row.default\"></app-defaulted>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .col-name .row{display:flex;align-items:center}:host ::ng-deep .col-name fs-country img{display:flex}fs-country{margin-right:5px}app-defaulted{margin-left:5px}mat-icon{display:flex}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i4$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i4$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i5$3.FsCountryComponent, selector: "fs-country", inputs: ["code", "showIcon", "showName", "region", "width"] }, { kind: "component", type: DefaultedComponent, selector: "app-defaulted" }, { kind: "pipe", type: i8$2.FsPhonePipe, name: "fsPhone" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
823
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
824
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: VerificationMethodsComponent, isStandalone: true, selector: "fs-2fa-verification-methods", inputs: { type: "type", accountVerify: "accountVerify", verificationMethodsFetch: "verificationMethodsFetch", verificationMethodDelete: "verificationMethodDelete", verificationMethodDefault: "verificationMethodDefault", twoFactorManageService: "twoFactorManageService" }, outputs: { deleted: "deleted" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-icon\" width=\"1%\">\n <ng-template fs-list-cell let-row=\"row\">\n @if (row.type === VerificationMethodType.Sms) {\n <mat-icon>textsms</mat-icon>\n }\n\n @if (row.type === VerificationMethodType.Email) {\n <mat-icon>email</mat-icon>\n }\n\n @if (row.type === VerificationMethodType.App) {\n <mat-icon>phone_iphone</mat-icon>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n @if (row.type === VerificationMethodType.Sms) {\n <div class=\"row\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country>\n <span>{{row.phoneNumber | fsPhone}}</span>\n </div>\n }\n\n @if (row.type === VerificationMethodType.Email) {\n {{row.email}}\n }\n\n @if (row.type === VerificationMethodType.App) {\n App\n }\n\n @if (row.default) {\n <app-defaulted></app-defaulted>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .col-name .row{display:flex;align-items:center}:host ::ng-deep .col-name fs-country img{display:flex}fs-country{margin-right:5px}app-defaulted{margin-left:5px}mat-icon{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1$5.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1$5.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1$5.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FsCountryModule }, { kind: "component", type: i2$2.FsCountryComponent, selector: "fs-country", inputs: ["code", "showIcon", "showName", "region", "width"] }, { kind: "component", type: DefaultedComponent, selector: "app-defaulted" }, { kind: "ngmodule", type: FsPhoneModule }, { kind: "pipe", type: i3.FsPhonePipe, name: "fsPhone" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
810
825
  }
811
826
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodsComponent, decorators: [{
812
827
  type: Component,
813
- args: [{ selector: 'fs-2fa-verification-methods', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-icon\" width=\"1%\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.type === VerificationMethodType.Sms\">\n <mat-icon>textsms</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.Email\">\n <mat-icon>email</mat-icon>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.App\">\n <mat-icon>phone_iphone</mat-icon>\n </ng-container>\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n <ng-container *ngIf=\"row.type === VerificationMethodType.Sms\">\n <div class=\"row\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country> \n <span>{{row.phoneNumber | fsPhone}}</span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.Email\">\n {{row.email}}\n </ng-container>\n\n <ng-container *ngIf=\"row.type === VerificationMethodType.App\">\n App\n </ng-container>\n\n <app-defaulted *ngIf=\"row.default\"></app-defaulted>\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .col-name .row{display:flex;align-items:center}:host ::ng-deep .col-name fs-country img{display:flex}fs-country{margin-right:5px}app-defaulted{margin-left:5px}mat-icon{display:flex}\n"] }]
814
- }], ctorParameters: () => [{ type: i1$2.FsPrompt }], propDecorators: { list: [{
828
+ args: [{ selector: 'fs-2fa-verification-methods', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
829
+ FsListModule,
830
+ MatIcon,
831
+ FsCountryModule,
832
+ DefaultedComponent,
833
+ FsPhoneModule,
834
+ ], template: "<fs-list [config]=\"listConfig\">\n <fs-list-column class=\"col-icon\" width=\"1%\">\n <ng-template fs-list-cell let-row=\"row\">\n @if (row.type === VerificationMethodType.Sms) {\n <mat-icon>textsms</mat-icon>\n }\n\n @if (row.type === VerificationMethodType.Email) {\n <mat-icon>email</mat-icon>\n }\n\n @if (row.type === VerificationMethodType.App) {\n <mat-icon>phone_iphone</mat-icon>\n }\n </ng-template>\n </fs-list-column>\n <fs-list-column class=\"col-name\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"row\">\n @if (row.type === VerificationMethodType.Sms) {\n <div class=\"row\">\n <fs-country [code]=\"row.phoneCountry\" [showName]=\"false\"></fs-country>\n <span>{{row.phoneNumber | fsPhone}}</span>\n </div>\n }\n\n @if (row.type === VerificationMethodType.Email) {\n {{row.email}}\n }\n\n @if (row.type === VerificationMethodType.App) {\n App\n }\n\n @if (row.default) {\n <app-defaulted></app-defaulted>\n }\n </div>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .col-name .row{display:flex;align-items:center}:host ::ng-deep .col-name fs-country img{display:flex}fs-country{margin-right:5px}app-defaulted{margin-left:5px}mat-icon{display:flex}\n"] }]
835
+ }], propDecorators: { list: [{
815
836
  type: ViewChild,
816
837
  args: [FsListComponent]
817
838
  }], type: [{
@@ -831,16 +852,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
831
852
  }] } });
832
853
 
833
854
  class EmailsComponent {
834
- _data;
835
- _dialogRef;
836
- _message;
855
+ _data = inject(MAT_DIALOG_DATA);
856
+ _dialogRef = inject(MatDialogRef);
857
+ _message = inject(FsMessage);
837
858
  verificationMethods;
838
859
  twoFactorManageService;
839
860
  VerificationMethodType = VerificationMethodType;
840
- constructor(_data, _dialogRef, _message) {
841
- this._data = _data;
842
- this._dialogRef = _dialogRef;
843
- this._message = _message;
861
+ constructor() {
862
+ const _data = this._data;
844
863
  this.twoFactorManageService = _data.twoFactorManageService;
845
864
  }
846
865
  add() {
@@ -855,32 +874,37 @@ class EmailsComponent {
855
874
  this._dialogRef.close();
856
875
  }
857
876
  }
858
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailsComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
859
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: EmailsComponent, selector: "ng-component", viewQueries: [{ propertyName: "verificationMethods", first: true, predicate: VerificationMethodsComponent, descendants: true }], ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add email\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [""], dependencies: [{ kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: VerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: ["type", "accountVerify", "verificationMethodsFetch", "verificationMethodDelete", "verificationMethodDefault", "twoFactorManageService"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
877
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
878
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: EmailsComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "verificationMethods", first: true, predicate: VerificationMethodsComponent, descendants: true }], ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add email\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: VerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: ["type", "accountVerify", "verificationMethodsFetch", "verificationMethodDelete", "verificationMethodDefault", "twoFactorManageService"], outputs: ["deleted"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
860
879
  }
861
880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailsComponent, decorators: [{
862
881
  type: Component,
863
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add email\n </button>\n </mat-dialog-actions>\n</fs-dialog>" }]
864
- }], ctorParameters: () => [{ type: undefined, decorators: [{
865
- type: Inject,
866
- args: [MAT_DIALOG_DATA]
867
- }] }, { type: i1.MatDialogRef }, { type: i2$1.FsMessage }], propDecorators: { verificationMethods: [{
882
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
883
+ FsDialogModule,
884
+ MatDialogTitle,
885
+ CdkScrollable,
886
+ MatDialogContent,
887
+ VerificationMethodsComponent,
888
+ MatDialogActions,
889
+ MatButton,
890
+ FsFormModule,
891
+ MatDialogClose,
892
+ ], template: "<fs-dialog>\n <h1 mat-dialog-title>\n Emails\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Email\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add email\n </button>\n </mat-dialog-actions>\n</fs-dialog>" }]
893
+ }], ctorParameters: () => [], propDecorators: { verificationMethods: [{
868
894
  type: ViewChild,
869
895
  args: [VerificationMethodsComponent]
870
896
  }] } });
871
897
 
872
898
  class NumbersComponent {
873
- _data;
874
- _dialogRef;
875
- _message;
899
+ _data = inject(MAT_DIALOG_DATA);
900
+ _dialogRef = inject(MatDialogRef);
901
+ _message = inject(FsMessage);
876
902
  verificationMethods;
877
903
  defaultCountry;
878
904
  twoFactorManageService;
879
905
  VerificationMethodType = VerificationMethodType;
880
- constructor(_data, _dialogRef, _message) {
881
- this._data = _data;
882
- this._dialogRef = _dialogRef;
883
- this._message = _message;
906
+ constructor() {
907
+ const _data = this._data;
884
908
  this.twoFactorManageService = _data.twoFactorManageService;
885
909
  this.defaultCountry = _data.defaultCountry;
886
910
  }
@@ -896,37 +920,38 @@ class NumbersComponent {
896
920
  this._dialogRef.close();
897
921
  }
898
922
  }
899
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumbersComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
900
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: NumbersComponent, selector: "ng-component", viewQueries: [{ propertyName: "verificationMethods", first: true, predicate: VerificationMethodsComponent, descendants: true }], ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Text message numbers\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add number\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [""], dependencies: [{ kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: VerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: ["type", "accountVerify", "verificationMethodsFetch", "verificationMethodDelete", "verificationMethodDefault", "twoFactorManageService"], outputs: ["deleted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
923
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumbersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
924
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: NumbersComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "verificationMethods", first: true, predicate: VerificationMethodsComponent, descendants: true }], ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Text message numbers\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add number\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: VerificationMethodsComponent, selector: "fs-2fa-verification-methods", inputs: ["type", "accountVerify", "verificationMethodsFetch", "verificationMethodDelete", "verificationMethodDefault", "twoFactorManageService"], outputs: ["deleted"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
901
925
  }
902
926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: NumbersComponent, decorators: [{
903
927
  type: Component,
904
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Text message numbers\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add number\n </button>\n </mat-dialog-actions>\n</fs-dialog>" }]
905
- }], ctorParameters: () => [{ type: undefined, decorators: [{
906
- type: Inject,
907
- args: [MAT_DIALOG_DATA]
908
- }] }, { type: i1.MatDialogRef }, { type: i2$1.FsMessage }], propDecorators: { verificationMethods: [{
928
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
929
+ FsDialogModule,
930
+ MatDialogTitle,
931
+ CdkScrollable,
932
+ MatDialogContent,
933
+ VerificationMethodsComponent,
934
+ MatDialogActions,
935
+ MatButton,
936
+ FsFormModule,
937
+ MatDialogClose,
938
+ ], template: "<fs-dialog>\n <h1 mat-dialog-title>\n Text message numbers\n </h1>\n <mat-dialog-content>\n <fs-2fa-verification-methods\n [type]=\"VerificationMethodType.Sms\"\n [twoFactorManageService]=\"twoFactorManageService\"\n (deleted)=\"deleted()\">\n </fs-2fa-verification-methods>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n <button\n mat-button\n (click)=\"add()\"\n type=\"button\">\n Add number\n </button>\n </mat-dialog-actions>\n</fs-dialog>" }]
939
+ }], ctorParameters: () => [], propDecorators: { verificationMethods: [{
909
940
  type: ViewChild,
910
941
  args: [VerificationMethodsComponent]
911
942
  }] } });
912
943
 
913
944
  class ManageMethodsComponent {
914
- _data;
915
- _cdRef;
916
- _dialog;
917
- _message;
945
+ _data = inject(MAT_DIALOG_DATA);
946
+ _cdRef = inject(ChangeDetectorRef);
947
+ _dialog = inject(MatDialog);
948
+ _message = inject(FsMessage);
918
949
  twoFactorManageService;
919
950
  verificationMethods;
920
951
  verificationMethodTypes = {};
921
952
  VerificationMethodType = VerificationMethodType;
922
953
  _destroy$ = new Subject();
923
954
  _defaultCountry;
924
- constructor(_data, _cdRef, _dialog, _message) {
925
- this._data = _data;
926
- this._cdRef = _cdRef;
927
- this._dialog = _dialog;
928
- this._message = _message;
929
- }
930
955
  ngOnInit() {
931
956
  this._defaultCountry = this._data.defaultCountry;
932
957
  this.twoFactorManageService = this._data.twoFactorManageService;
@@ -1015,21 +1040,32 @@ class ManageMethodsComponent {
1015
1040
  this._destroy$.next(null);
1016
1041
  this._destroy$.complete();
1017
1042
  }
1018
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManageMethodsComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: i2$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
1019
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ManageMethodsComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n 2-step verification\n </h1>\n <mat-dialog-content>\n <table>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.Sms]\">\n <td>\n <mat-icon>\n textsms\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Text message\n </span>\n @if (textHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultSms\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by text message\n <ng-container *ngIf=\"textHasVerificationMethod\">\n to\n <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.smsVerificationMethods\">\n {{ item.phoneNumber | fsPhone }}\n </span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n @if (textHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.Email]\">\n <td>\n <mat-icon>\n email\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Email\n </span>\n @if (emailHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultEmail\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by email\n <ng-container *ngIf=\"emailHasVerificationMethod\">\n to\n <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.emailVerificationMethods\">\n {{ item.email }}\n </span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n @if (emailHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.App]\">\n <td>\n <mat-icon>\n phone_iphone\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Authenticator app\n </span>\n @if (appHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultApp\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification code is generated by an authenticator app such as Authy or Google Authenticator\n </div>\n </td>\n <td>\n @if (appHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n </table>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n<ng-template #enabledChip>\n <fs-chip\n [backgroundColor]=\"'#70B601'\"\n [size]=\"'tiny'\">\n Enabled\n </fs-chip>\n</ng-template>", styles: ["mat-dialog-content{max-width:500px}table tr td:first-child,table tr td:last-child{width:1%}table tr td:first-child mat-icon,table tr td:last-child mat-icon{display:flex}table tr td{padding:15px 6px;vertical-align:top}table tr button{white-space:nowrap}table tr .type{display:flex;align-items:center}table tr .type span{margin-right:5px}table tr .type app-defaulted{margin-left:4px}.items span+span:not(:last-child):before{content:\", \"}.items span+span:last-child:before{content:\" and \"}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i5$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: i1$1.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "actionable", "value", "maxWidth", "actions", "icon", "image", "selected", "size", "backgroundColor", "borderColor", "color", "outlined"], outputs: ["selectedToggled", "removed"] }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: DefaultedComponent, selector: "app-defaulted" }, { kind: "pipe", type: i8$2.FsPhonePipe, name: "fsPhone" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1043
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManageMethodsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1044
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ManageMethodsComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>\n 2-step verification\n </h1>\n <mat-dialog-content>\n <table>\n @if (verificationMethodTypes[VerificationMethodType.Sms]) {\n <tr>\n <td>\n <mat-icon>\n textsms\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Text message\n </span>\n @if (textHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultSms) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification codes are sent by text message\n @if (textHasVerificationMethod) {\n to\n <span class=\"items\">\n @for (item of twoFactorManageService.smsVerificationMethods; track item) {\n <span>\n {{ item.phoneNumber | fsPhone }}\n </span>\n }\n </span>\n }\n </div>\n </td>\n <td>\n @if (textHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n @if (verificationMethodTypes[VerificationMethodType.Email]) {\n <tr>\n <td>\n <mat-icon>\n email\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Email\n </span>\n @if (emailHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultEmail) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification codes are sent by email\n @if (emailHasVerificationMethod) {\n to\n <span class=\"items\">\n @for (item of twoFactorManageService.emailVerificationMethods; track item) {\n <span>\n {{ item.email }}\n </span>\n }\n </span>\n }\n </div>\n </td>\n <td>\n @if (emailHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n @if (verificationMethodTypes[VerificationMethodType.App]) {\n <tr>\n <td>\n <mat-icon>\n phone_iphone\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Authenticator app\n </span>\n @if (appHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultApp) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification code is generated by an authenticator app such as Authy or Google Authenticator\n </div>\n </td>\n <td>\n @if (appHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n </table>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n<ng-template #enabledChip>\n <fs-chip\n [backgroundColor]=\"'#70B601'\"\n [size]=\"'tiny'\">\n Enabled\n </fs-chip>\n</ng-template>", styles: ["mat-dialog-content{max-width:500px}table tr td:first-child,table tr td:last-child{width:1%}table tr td:first-child mat-icon,table tr td:last-child mat-icon{display:flex}table tr td{padding:15px 6px;vertical-align:top}table tr button{white-space:nowrap}table tr .type{display:flex;align-items:center}table tr .type span{margin-right:5px}table tr .type app-defaulted{margin-left:4px}.items span+span:not(:last-child):before{content:\", \"}.items span+span:last-child:before{content:\" and \"}\n"], dependencies: [{ kind: "ngmodule", type: FsDialogModule }, { kind: "directive", type: i1$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i2$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DefaultedComponent, selector: "app-defaulted" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "ngmodule", type: FsChipModule }, { kind: "component", type: i1$4.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "actionable", "value", "maxWidth", "actions", "icon", "image", "selected", "size", "backgroundColor", "borderColor", "color", "outlined"], outputs: ["selectedToggled", "removed"] }, { kind: "ngmodule", type: FsPhoneModule }, { kind: "pipe", type: i3.FsPhonePipe, name: "fsPhone" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1020
1045
  }
1021
1046
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ManageMethodsComponent, decorators: [{
1022
1047
  type: Component,
1023
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>\n 2-step verification\n </h1>\n <mat-dialog-content>\n <table>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.Sms]\">\n <td>\n <mat-icon>\n textsms\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Text message\n </span>\n @if (textHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultSms\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by text message\n <ng-container *ngIf=\"textHasVerificationMethod\">\n to\n <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.smsVerificationMethods\">\n {{ item.phoneNumber | fsPhone }}\n </span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n @if (textHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.Email]\">\n <td>\n <mat-icon>\n email\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Email\n </span>\n @if (emailHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultEmail\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification codes are sent by email\n <ng-container *ngIf=\"emailHasVerificationMethod\">\n to\n <span class=\"items\">\n <span *ngFor=\"let item of twoFactorManageService.emailVerificationMethods\">\n {{ item.email }}\n </span>\n </span>\n </ng-container>\n </div>\n </td>\n <td>\n @if (emailHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n <tr *ngIf=\"verificationMethodTypes[VerificationMethodType.App]\">\n <td>\n <mat-icon>\n phone_iphone\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Authenticator app\n </span>\n @if (appHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n <app-defaulted *ngIf=\"defaultApp\"></app-defaulted>\n </div>\n <div class=\"small\">\n Verification code is generated by an authenticator app such as Authy or Google Authenticator\n </div>\n </td>\n <td>\n @if (appHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n </table>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n<ng-template #enabledChip>\n <fs-chip\n [backgroundColor]=\"'#70B601'\"\n [size]=\"'tiny'\">\n Enabled\n </fs-chip>\n</ng-template>", styles: ["mat-dialog-content{max-width:500px}table tr td:first-child,table tr td:last-child{width:1%}table tr td:first-child mat-icon,table tr td:last-child mat-icon{display:flex}table tr td{padding:15px 6px;vertical-align:top}table tr button{white-space:nowrap}table tr .type{display:flex;align-items:center}table tr .type span{margin-right:5px}table tr .type app-defaulted{margin-left:4px}.items span+span:not(:last-child):before{content:\", \"}.items span+span:last-child:before{content:\" and \"}\n"] }]
1024
- }], ctorParameters: () => [{ type: undefined, decorators: [{
1025
- type: Inject,
1026
- args: [MAT_DIALOG_DATA]
1027
- }] }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: i2$1.FsMessage }] });
1048
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1049
+ FsDialogModule,
1050
+ MatDialogTitle,
1051
+ CdkScrollable,
1052
+ MatDialogContent,
1053
+ MatIcon,
1054
+ NgTemplateOutlet,
1055
+ DefaultedComponent,
1056
+ MatButton,
1057
+ FsFormModule,
1058
+ MatDialogActions,
1059
+ MatDialogClose,
1060
+ FsChipModule,
1061
+ FsPhoneModule,
1062
+ ], template: "<fs-dialog>\n <h1 mat-dialog-title>\n 2-step verification\n </h1>\n <mat-dialog-content>\n <table>\n @if (verificationMethodTypes[VerificationMethodType.Sms]) {\n <tr>\n <td>\n <mat-icon>\n textsms\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Text message\n </span>\n @if (textHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultSms) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification codes are sent by text message\n @if (textHasVerificationMethod) {\n to\n <span class=\"items\">\n @for (item of twoFactorManageService.smsVerificationMethods; track item) {\n <span>\n {{ item.phoneNumber | fsPhone }}\n </span>\n }\n </span>\n }\n </div>\n </td>\n <td>\n @if (textHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"textMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n @if (verificationMethodTypes[VerificationMethodType.Email]) {\n <tr>\n <td>\n <mat-icon>\n email\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Email\n </span>\n @if (emailHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultEmail) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification codes are sent by email\n @if (emailHasVerificationMethod) {\n to\n <span class=\"items\">\n @for (item of twoFactorManageService.emailVerificationMethods; track item) {\n <span>\n {{ item.email }}\n </span>\n }\n </span>\n }\n </div>\n </td>\n <td>\n @if (emailHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageManage()\">\n Manage\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"emailMessageAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n @if (verificationMethodTypes[VerificationMethodType.App]) {\n <tr>\n <td>\n <mat-icon>\n phone_iphone\n </mat-icon>\n </td>\n <td>\n <div class=\"type\">\n <span>\n Authenticator app\n </span>\n @if (appHasVerificationMethod) {\n <ng-container [ngTemplateOutlet]=\"enabledChip\"></ng-container>\n }\n @if (defaultApp) {\n <app-defaulted></app-defaulted>\n }\n </div>\n <div class=\"small\">\n Verification code is generated by an authenticator app such as Authy or Google Authenticator\n </div>\n </td>\n <td>\n @if (appHasVerificationMethod) {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appRemove()\">\n Remove\n </button>\n } @else {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"appAdd()\">\n Turn on\n </button>\n }\n </td>\n </tr>\n }\n </table>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n<ng-template #enabledChip>\n <fs-chip\n [backgroundColor]=\"'#70B601'\"\n [size]=\"'tiny'\">\n Enabled\n </fs-chip>\n</ng-template>", styles: ["mat-dialog-content{max-width:500px}table tr td:first-child,table tr td:last-child{width:1%}table tr td:first-child mat-icon,table tr td:last-child mat-icon{display:flex}table tr td{padding:15px 6px;vertical-align:top}table tr button{white-space:nowrap}table tr .type{display:flex;align-items:center}table tr .type span{margin-right:5px}table tr .type app-defaulted{margin-left:4px}.items span+span:not(:last-child):before{content:\", \"}.items span+span:last-child:before{content:\" and \"}\n"] }]
1063
+ }] });
1028
1064
 
1029
1065
  class Fs2faManageComponent {
1030
- _cdRef;
1031
- _dialog;
1032
- _twoFactorManageService;
1066
+ _cdRef = inject(ChangeDetectorRef);
1067
+ _dialog = inject(MatDialog);
1068
+ _twoFactorManageService = inject(TwoFactorManageService);
1033
1069
  accountVerify;
1034
1070
  defaultCountry;
1035
1071
  verificationMethodTypes;
@@ -1041,11 +1077,6 @@ class Fs2faManageComponent {
1041
1077
  verificationMethodResend;
1042
1078
  statuses;
1043
1079
  _destroy$ = new Subject();
1044
- constructor(_cdRef, _dialog, _twoFactorManageService) {
1045
- this._cdRef = _cdRef;
1046
- this._dialog = _dialog;
1047
- this._twoFactorManageService = _twoFactorManageService;
1048
- }
1049
1080
  ngOnInit() {
1050
1081
  this.verificationMethodTypes = this.verificationMethodTypes || [
1051
1082
  VerificationMethodType.Sms,
@@ -1100,13 +1131,13 @@ class Fs2faManageComponent {
1100
1131
  this._destroy$.next(null);
1101
1132
  this._destroy$.complete();
1102
1133
  }
1103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.MatDialog }, { token: TwoFactorManageService }], target: i0.ɵɵFactoryTarget.Component });
1104
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faManageComponent, selector: "fs-2fa-manage", inputs: { accountVerify: "accountVerify", defaultCountry: "defaultCountry", verificationMethodTypes: "verificationMethodTypes", verificationMethodsFetch: "verificationMethodsFetch", verificationMethodDelete: "verificationMethodDelete", verificationMethodCreate: "verificationMethodCreate", verificationMethodDefault: "verificationMethodDefault", verificationMethodVerify: "verificationMethodVerify", verificationMethodResend: "verificationMethodResend" }, providers: [TwoFactorManageService], ngImport: i0, template: "<fs-label-field>\n <fs-label>Status</fs-label>\n <ng-container *ngIf=\"statuses\">\n <ng-container *ngIf=\"statuses.length === 1\">\n {{statuses[0]}} verification is enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length > 1\">\n {{statuses.join(', ')}} verifications are enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length === 0\">\n No verification methods are enabled\n </ng-container>\n </ng-container>\n</fs-label-field>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$2.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i4$2.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: Fs2faManageComponent, isStandalone: true, selector: "fs-2fa-manage", inputs: { accountVerify: "accountVerify", defaultCountry: "defaultCountry", verificationMethodTypes: "verificationMethodTypes", verificationMethodsFetch: "verificationMethodsFetch", verificationMethodDelete: "verificationMethodDelete", verificationMethodCreate: "verificationMethodCreate", verificationMethodDefault: "verificationMethodDefault", verificationMethodVerify: "verificationMethodVerify", verificationMethodResend: "verificationMethodResend" }, providers: [TwoFactorManageService], ngImport: i0, template: "<fs-label-field>\n <fs-label>Status</fs-label>\n @if (statuses) {\n @if (statuses.length === 1) {\n {{statuses[0]}} verification is enabled\n }\n @if (statuses.length > 1) {\n {{statuses.join(', ')}} verifications are enabled\n }\n @if (statuses.length === 0) {\n No verification methods are enabled\n }\n }\n</fs-label-field>", styles: [""], dependencies: [{ kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i1$6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i1$6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1105
1136
  }
1106
1137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageComponent, decorators: [{
1107
1138
  type: Component,
1108
- args: [{ selector: 'fs-2fa-manage', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TwoFactorManageService], template: "<fs-label-field>\n <fs-label>Status</fs-label>\n <ng-container *ngIf=\"statuses\">\n <ng-container *ngIf=\"statuses.length === 1\">\n {{statuses[0]}} verification is enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length > 1\">\n {{statuses.join(', ')}} verifications are enabled\n </ng-container>\n\n <ng-container *ngIf=\"statuses.length === 0\">\n No verification methods are enabled\n </ng-container>\n </ng-container>\n</fs-label-field>" }]
1109
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.MatDialog }, { type: TwoFactorManageService }], propDecorators: { accountVerify: [{
1139
+ args: [{ selector: 'fs-2fa-manage', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TwoFactorManageService], standalone: true, imports: [FsLabelModule], template: "<fs-label-field>\n <fs-label>Status</fs-label>\n @if (statuses) {\n @if (statuses.length === 1) {\n {{statuses[0]}} verification is enabled\n }\n @if (statuses.length > 1) {\n {{statuses.join(', ')}} verifications are enabled\n }\n @if (statuses.length === 0) {\n No verification methods are enabled\n }\n }\n</fs-label-field>" }]
1140
+ }], propDecorators: { accountVerify: [{
1110
1141
  type: Input
1111
1142
  }], defaultCountry: [{
1112
1143
  type: Input
@@ -1126,337 +1157,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1126
1157
  type: Input
1127
1158
  }] } });
1128
1159
 
1129
- class CodeInputModule {
1130
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CodeInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1131
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: CodeInputModule, declarations: [CodeInputComponent], imports: [FormsModule,
1132
- MatFormFieldModule,
1133
- MatInputModule,
1134
- FsCodeInputModule], exports: [CodeInputComponent] });
1135
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CodeInputModule, imports: [FormsModule,
1136
- MatFormFieldModule,
1137
- MatInputModule,
1138
- FsCodeInputModule] });
1139
- }
1140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CodeInputModule, decorators: [{
1141
- type: NgModule,
1142
- args: [{
1143
- imports: [
1144
- FormsModule,
1145
- MatFormFieldModule,
1146
- MatInputModule,
1147
- FsCodeInputModule,
1148
- ],
1149
- declarations: [
1150
- CodeInputComponent,
1151
- ],
1152
- exports: [
1153
- CodeInputComponent,
1154
- ],
1155
- }]
1156
- }] });
1157
-
1158
- class DefautledModule {
1159
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefautledModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1160
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: DefautledModule, declarations: [DefaultedComponent], imports: [FsChipModule], exports: [DefaultedComponent] });
1161
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefautledModule, imports: [FsChipModule] });
1162
- }
1163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DefautledModule, decorators: [{
1164
- type: NgModule,
1165
- args: [{
1166
- declarations: [
1167
- DefaultedComponent,
1168
- ],
1169
- imports: [
1170
- FsChipModule,
1171
- ],
1172
- exports: [DefaultedComponent],
1173
- }]
1174
- }] });
1175
-
1176
- class ResendComponent {
1177
- _cdRef;
1178
- resend;
1179
- resendInProgress = false;
1180
- _destroy$ = new Subject();
1181
- constructor(_cdRef) {
1182
- this._cdRef = _cdRef;
1183
- }
1184
- resendClick() {
1185
- this.resendInProgress = true;
1186
- this.resend()
1187
- .pipe(finalize(() => {
1188
- this.resendInProgress = false;
1189
- this._cdRef.markForCheck();
1190
- }), takeUntil(this._destroy$))
1191
- .subscribe();
1192
- }
1193
- ngOnDestroy() {
1194
- this._destroy$.next(null);
1195
- this._destroy$.complete();
1196
- }
1197
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ResendComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1198
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ResendComponent, selector: "app-resend", inputs: { resend: "resend" }, ngImport: i0, template: "<ng-container *ngIf=\"!resendInProgress else sending\">\n Didn't receive a code? <a (click)=\"resendClick()\">Resend</a>\n</ng-container>\n<ng-template #sending>\n <div class=\"sending\">\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </div>\n</ng-template>\n\n", styles: ["small{color:inherit}.sending{display:inline-flex;align-items:center}.sending mat-spinner{margin-right:2px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1199
- }
1200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ResendComponent, decorators: [{
1201
- type: Component,
1202
- args: [{ selector: 'app-resend', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"!resendInProgress else sending\">\n Didn't receive a code? <a (click)=\"resendClick()\">Resend</a>\n</ng-container>\n<ng-template #sending>\n <div class=\"sending\">\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </div>\n</ng-template>\n\n", styles: ["small{color:inherit}.sending{display:inline-flex;align-items:center}.sending mat-spinner{margin-right:2px}\n"] }]
1203
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { resend: [{
1204
- type: Input
1205
- }] } });
1206
-
1207
- class ResendModule {
1208
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ResendModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1209
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: ResendModule, declarations: [ResendComponent], imports: [CommonModule,
1210
- MatProgressSpinnerModule], exports: [ResendComponent] });
1211
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ResendModule, imports: [CommonModule,
1212
- MatProgressSpinnerModule] });
1213
- }
1214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ResendModule, decorators: [{
1215
- type: NgModule,
1216
- args: [{
1217
- imports: [
1218
- CommonModule,
1219
- MatProgressSpinnerModule,
1220
- ],
1221
- declarations: [
1222
- ResendComponent,
1223
- ],
1224
- exports: [
1225
- ResendComponent,
1226
- ],
1227
- }]
1228
- }] });
1229
-
1230
- class Fs2faVerificationMethodsModule {
1231
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1232
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsModule, declarations: [VerificationMethodsComponent], imports: [CommonModule,
1233
- FormsModule,
1234
- MatIconModule,
1235
- FsListModule,
1236
- FsPhoneModule,
1237
- FsCountryModule,
1238
- DefautledModule], exports: [VerificationMethodsComponent] });
1239
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsModule, imports: [CommonModule,
1240
- FormsModule,
1241
- MatIconModule,
1242
- FsListModule,
1243
- FsPhoneModule,
1244
- FsCountryModule,
1245
- DefautledModule] });
1246
- }
1247
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationMethodsModule, decorators: [{
1248
- type: NgModule,
1249
- args: [{
1250
- imports: [
1251
- CommonModule,
1252
- FormsModule,
1253
- MatIconModule,
1254
- FsListModule,
1255
- FsPhoneModule,
1256
- FsCountryModule,
1257
- DefautledModule,
1258
- ],
1259
- declarations: [
1260
- VerificationMethodsComponent,
1261
- ],
1262
- exports: [VerificationMethodsComponent],
1263
- }]
1264
- }] });
1265
-
1266
- class Fs2faVerificationResendDirective {
1267
- verification;
1268
- _button = inject(MatButton);
1269
- click() {
1270
- this._button.disabled = true;
1271
- this.verification.resendCode()
1272
- .pipe(finalize(() => this._button.disabled = false))
1273
- .subscribe();
1274
- }
1275
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationResendDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1276
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faVerificationResendDirective, selector: "[fs2faVerificationResend]", inputs: { verification: ["fs2faVerificationResend", "verification"] }, host: { listeners: { "click": "click()" } }, ngImport: i0 });
1277
- }
1278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationResendDirective, decorators: [{
1279
- type: Directive,
1280
- args: [{
1281
- selector: '[fs2faVerificationResend]',
1282
- }]
1283
- }], propDecorators: { verification: [{
1284
- type: Input,
1285
- args: ['fs2faVerificationResend']
1286
- }], click: [{
1287
- type: HostListener,
1288
- args: ['click']
1289
- }] } });
1290
-
1291
- class Fs2faVerificationModule {
1292
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1293
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationModule, declarations: [Fs2faVerificationComponent,
1294
- Fs2faVerificationCodeComponent,
1295
- Fs2faVerificationMethodsComponent,
1296
- Fs2faVerificationResendDirective], imports: [CommonModule,
1297
- FormsModule,
1298
- MatFormFieldModule,
1299
- MatInputModule,
1300
- MatButtonModule,
1301
- MatIconModule,
1302
- MatRadioModule,
1303
- MatCheckboxModule,
1304
- FsFormModule,
1305
- FsRadioGroupModule,
1306
- FsDialogModule,
1307
- FsSkeletonModule,
1308
- FsPhoneModule,
1309
- FsSkeletonModule,
1310
- ResendModule,
1311
- CodeInputModule], exports: [Fs2faVerificationComponent,
1312
- Fs2faVerificationResendDirective] });
1313
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationModule, imports: [CommonModule,
1314
- FormsModule,
1315
- MatFormFieldModule,
1316
- MatInputModule,
1317
- MatButtonModule,
1318
- MatIconModule,
1319
- MatRadioModule,
1320
- MatCheckboxModule,
1321
- FsFormModule,
1322
- FsRadioGroupModule,
1323
- FsDialogModule,
1324
- FsSkeletonModule,
1325
- FsPhoneModule,
1326
- FsSkeletonModule,
1327
- ResendModule,
1328
- CodeInputModule] });
1329
- }
1330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationModule, decorators: [{
1331
- type: NgModule,
1332
- args: [{
1333
- imports: [
1334
- CommonModule,
1335
- FormsModule,
1336
- MatFormFieldModule,
1337
- MatInputModule,
1338
- MatButtonModule,
1339
- MatIconModule,
1340
- MatRadioModule,
1341
- MatCheckboxModule,
1342
- FsFormModule,
1343
- FsRadioGroupModule,
1344
- FsDialogModule,
1345
- FsSkeletonModule,
1346
- FsPhoneModule,
1347
- FsSkeletonModule,
1348
- ResendModule,
1349
- CodeInputModule,
1350
- ],
1351
- declarations: [
1352
- Fs2faVerificationComponent,
1353
- Fs2faVerificationCodeComponent,
1354
- Fs2faVerificationMethodsComponent,
1355
- Fs2faVerificationResendDirective,
1356
- ],
1357
- exports: [
1358
- Fs2faVerificationComponent,
1359
- Fs2faVerificationResendDirective,
1360
- ],
1361
- providers: [],
1362
- }]
1363
- }] });
1364
-
1365
- class Fs2faManageModule {
1366
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1367
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageModule, declarations: [Fs2faManageComponent,
1368
- ManageMethodsComponent,
1369
- NumbersComponent,
1370
- AppComponent,
1371
- EmailComponent$1,
1372
- NumberComponent,
1373
- EmailsComponent], imports: [CommonModule,
1374
- FormsModule,
1375
- MatButtonModule,
1376
- MatDialogModule,
1377
- MatInputModule,
1378
- MatIconModule,
1379
- MatCheckboxModule,
1380
- FsDialogModule,
1381
- FsListModule,
1382
- FsChipModule,
1383
- FsFormModule,
1384
- FsLabelModule,
1385
- FsPhoneModule,
1386
- FsSkeletonModule,
1387
- FsCountryModule,
1388
- FsQrcodeModule,
1389
- CodeInputModule,
1390
- ResendModule,
1391
- DefautledModule,
1392
- Fs2faVerificationModule,
1393
- Fs2faVerificationMethodsModule], exports: [Fs2faManageComponent] });
1394
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageModule, imports: [CommonModule,
1395
- FormsModule,
1396
- MatButtonModule,
1397
- MatDialogModule,
1398
- MatInputModule,
1399
- MatIconModule,
1400
- MatCheckboxModule,
1401
- FsDialogModule,
1402
- FsListModule,
1403
- FsChipModule,
1404
- FsFormModule,
1405
- FsLabelModule,
1406
- FsPhoneModule,
1407
- FsSkeletonModule,
1408
- FsCountryModule,
1409
- FsQrcodeModule,
1410
- CodeInputModule,
1411
- ResendModule,
1412
- DefautledModule,
1413
- Fs2faVerificationModule,
1414
- Fs2faVerificationMethodsModule] });
1415
- }
1416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faManageModule, decorators: [{
1417
- type: NgModule,
1418
- args: [{
1419
- imports: [
1420
- CommonModule,
1421
- FormsModule,
1422
- MatButtonModule,
1423
- MatDialogModule,
1424
- MatInputModule,
1425
- MatIconModule,
1426
- MatCheckboxModule,
1427
- FsDialogModule,
1428
- FsListModule,
1429
- FsChipModule,
1430
- FsFormModule,
1431
- FsLabelModule,
1432
- FsPhoneModule,
1433
- FsSkeletonModule,
1434
- FsCountryModule,
1435
- FsQrcodeModule,
1436
- CodeInputModule,
1437
- ResendModule,
1438
- DefautledModule,
1439
- Fs2faVerificationModule,
1440
- Fs2faVerificationMethodsModule,
1441
- ],
1442
- declarations: [
1443
- Fs2faManageComponent,
1444
- ManageMethodsComponent,
1445
- NumbersComponent,
1446
- AppComponent,
1447
- EmailComponent$1,
1448
- NumberComponent,
1449
- EmailsComponent,
1450
- ],
1451
- exports: [Fs2faManageComponent],
1452
- }]
1453
- }] });
1454
-
1455
1160
  class VerificationMethodData {
1456
- _api;
1457
- constructor(_api) {
1458
- this._api = _api;
1459
- }
1161
+ _api = inject(FsApi);
1460
1162
  verify(code, trustDevice, config = {}) {
1461
1163
  return this._api.post('verifications/methods/verify', { code, trustDevice }, {
1462
1164
  key: 'verificationMethod',
@@ -1475,12 +1177,12 @@ class VerificationMethodData {
1475
1177
  ...config,
1476
1178
  });
1477
1179
  }
1478
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodData, deps: [{ token: i1$3.FsApi }], target: i0.ɵɵFactoryTarget.Injectable });
1180
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodData, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1479
1181
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodData });
1480
1182
  }
1481
1183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationMethodData, decorators: [{
1482
1184
  type: Injectable
1483
- }], ctorParameters: () => [{ type: i1$3.FsApi }] });
1185
+ }] });
1484
1186
 
1485
1187
  class VerificationSetupService {
1486
1188
  _api = inject(FsApi);
@@ -1515,14 +1217,12 @@ class EmailComponent {
1515
1217
  });
1516
1218
  }
1517
1219
  next = () => {
1518
- return of(true)
1519
- .pipe(tap$1(() => {
1520
- const redirect = this._route.snapshot.queryParams.redirect || '/';
1521
- this._router.navigate(['verify'], {
1522
- relativeTo: this._route,
1523
- queryParams: { redirect },
1524
- });
1525
- }));
1220
+ const redirect = this._route.snapshot.queryParams.redirect || '/';
1221
+ this._router.navigate(['verify'], {
1222
+ relativeTo: this._route,
1223
+ queryParams: { redirect },
1224
+ });
1225
+ return of(true);
1526
1226
  };
1527
1227
  cancel() {
1528
1228
  this._verificationSetupService
@@ -1530,13 +1230,49 @@ class EmailComponent {
1530
1230
  .subscribe();
1531
1231
  }
1532
1232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1533
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: EmailComponent, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"next\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"email\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>\n Please enable two factor authentication to protect your account.\n The app will use this email for verifying your account\n </p>\n <fs-label-field>\n <fs-label>\n Email\n </fs-label>\n {{ email }}\n </fs-label-field>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"], dependencies: [{ kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3$1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "directive", type: i5$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i4$2.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i4$2.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1233
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: EmailComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<form\n fsForm\n [submit]=\"next\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"email\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>\n Please enable two factor authentication to protect your account.\n The app will use this email for verifying your account\n </p>\n <fs-label-field>\n <fs-label>\n Email\n </fs-label>\n {{ email }}\n </fs-label-field>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$3.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "ngmodule", type: FsLabelModule }, { kind: "component", type: i1$6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i1$6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1534
1234
  }
1535
1235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: EmailComponent, decorators: [{
1536
1236
  type: Component,
1537
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"next\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"email\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>\n Please enable two factor authentication to protect your account.\n The app will use this email for verifying your account\n </p>\n <fs-label-field>\n <fs-label>\n Email\n </fs-label>\n {{ email }}\n </fs-label-field>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"] }]
1237
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1238
+ FsSkeletonModule,
1239
+ FormsModule,
1240
+ FsFormModule,
1241
+ MatCard,
1242
+ MatCardHeader,
1243
+ MatCardTitle,
1244
+ MatCardContent,
1245
+ FsLabelModule,
1246
+ MatButton,
1247
+ ], template: "<form\n fsForm\n [submit]=\"next\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"email\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <p>\n Please enable two factor authentication to protect your account.\n The app will use this email for verifying your account\n </p>\n <fs-label-field>\n <fs-label>\n Email\n </fs-label>\n {{ email }}\n </fs-label-field>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Next\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"] }]
1538
1248
  }] });
1539
1249
 
1250
+ class Fs2faVerificationResendDirective {
1251
+ verification;
1252
+ _button = inject(MatButton);
1253
+ click() {
1254
+ this._button.disabled = true;
1255
+ this.verification.resendCode()
1256
+ .pipe(finalize(() => this._button.disabled = false))
1257
+ .subscribe();
1258
+ }
1259
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationResendDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1260
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: Fs2faVerificationResendDirective, isStandalone: true, selector: "[fs2faVerificationResend]", inputs: { verification: ["fs2faVerificationResend", "verification"] }, host: { listeners: { "click": "click()" } }, ngImport: i0 });
1261
+ }
1262
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: Fs2faVerificationResendDirective, decorators: [{
1263
+ type: Directive,
1264
+ args: [{
1265
+ selector: '[fs2faVerificationResend]',
1266
+ standalone: true,
1267
+ }]
1268
+ }], propDecorators: { verification: [{
1269
+ type: Input,
1270
+ args: ['fs2faVerificationResend']
1271
+ }], click: [{
1272
+ type: HostListener,
1273
+ args: ['click']
1274
+ }] } });
1275
+
1540
1276
  class VerifyComponent {
1541
1277
  verification;
1542
1278
  code = null;
@@ -1575,11 +1311,22 @@ class VerifyComponent {
1575
1311
  .subscribe();
1576
1312
  }
1577
1313
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerifyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1578
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VerifyComponent, selector: "ng-component", viewQueries: [{ propertyName: "verification", first: true, predicate: Fs2faVerificationComponent, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"verify\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"verificationMethod\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <fs-2fa-verification\n #verification\n [verificationMethod]=\"verificationMethod\"\n [showTrustedDevice]=\"true\"\n [(code)]=\"code\"\n [resend]=\"resend\">\n </fs-2fa-verification>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Verify\n </button>\n <button\n mat-button\n [fs2faVerificationResend]=\"verification\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"], dependencies: [{ kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3$1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i10.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i10.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "directive", type: i5$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }, { kind: "directive", type: Fs2faVerificationResendDirective, selector: "[fs2faVerificationResend]", inputs: ["fs2faVerificationResend"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1314
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VerifyComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "verification", first: true, predicate: Fs2faVerificationComponent, descendants: true }], ngImport: i0, template: "<form\n fsForm\n [submit]=\"verify\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"verificationMethod\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <fs-2fa-verification\n #verification\n [verificationMethod]=\"verificationMethod\"\n [showTrustedDevice]=\"true\"\n [(code)]=\"code\"\n [resend]=\"resend\">\n </fs-2fa-verification>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Verify\n </button>\n <button\n mat-button\n [fs2faVerificationResend]=\"verification\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"], dependencies: [{ kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i1$3.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i2.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "tabGroup", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "directive", type: i2.FsButtonDirective, selector: "[mat-raised-button]:not([fsFormButtonStandalone]),[mat-button]:not([fsFormButtonStandalone]),[mat-flat-button]:not([fsFormButtonStandalone]),[mat-stroked-button]:not([fsFormButtonStandalone])", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: Fs2faVerificationComponent, selector: "fs-2fa-verification", inputs: ["verificationMethod", "resend", "showTrustedDevice", "trustDevice", "codeLength", "trustDays", "code", "formatRecipient", "getVerificationMethods", "selectVerificationMethod"], outputs: ["verified", "codeChange", "codeCompleted", "trustDeviceChange"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: Fs2faVerificationResendDirective, selector: "[fs2faVerificationResend]", inputs: ["fs2faVerificationResend"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1579
1315
  }
1580
1316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerifyComponent, decorators: [{
1581
1317
  type: Component,
1582
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n fsForm\n [submit]=\"verify\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"verificationMethod\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <fs-2fa-verification\n #verification\n [verificationMethod]=\"verificationMethod\"\n [showTrustedDevice]=\"true\"\n [(code)]=\"code\"\n [resend]=\"resend\">\n </fs-2fa-verification>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Verify\n </button>\n <button\n mat-button\n [fs2faVerificationResend]=\"verification\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"] }]
1318
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1319
+ FsSkeletonModule,
1320
+ FormsModule,
1321
+ FsFormModule,
1322
+ MatCard,
1323
+ MatCardHeader,
1324
+ MatCardTitle,
1325
+ MatCardContent,
1326
+ Fs2faVerificationComponent,
1327
+ MatButton,
1328
+ Fs2faVerificationResendDirective,
1329
+ ], template: "<form\n fsForm\n [submit]=\"verify\"\n [dirtySubmitButton]=\"false\"\n *fsSkeleton=\"verificationMethod\">\n <mat-card>\n <mat-card-header>\n <mat-card-title>\n Enable 2-step verification\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <fs-2fa-verification\n #verification\n [verificationMethod]=\"verificationMethod\"\n [showTrustedDevice]=\"true\"\n [(code)]=\"code\"\n [resend]=\"resend\">\n </fs-2fa-verification>\n <div class=\"buttons\">\n <button\n mat-flat-button\n type=\"submit\"\n color=\"primary\">\n Verify\n </button>\n <button\n mat-button\n [fs2faVerificationResend]=\"verification\"\n type=\"button\">\n Resend\n </button>\n <button\n mat-button\n (click)=\"cancel()\"\n type=\"button\">\n Cancel\n </button>\n </div>\n </mat-card-content>\n </mat-card>\n</form>", styles: ["h2{text-align:center}.buttons button+button{margin-top:5px}.buttons button{width:100%;display:block}\n"] }]
1583
1330
  }], propDecorators: { verification: [{
1584
1331
  type: ViewChild,
1585
1332
  args: [Fs2faVerificationComponent]
@@ -1591,7 +1338,7 @@ const routes = [
1591
1338
  ];
1592
1339
  class VerificationSetupRoutingModule {
1593
1340
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationSetupRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1594
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: VerificationSetupRoutingModule, imports: [i1$4.RouterModule], exports: [RouterModule] });
1341
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: VerificationSetupRoutingModule, imports: [i1$7.RouterModule], exports: [RouterModule] });
1595
1342
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationSetupRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] });
1596
1343
  }
1597
1344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VerificationSetupRoutingModule, decorators: [{
@@ -1608,8 +1355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1608
1355
 
1609
1356
  class FsVerificationSetupModule {
1610
1357
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsVerificationSetupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1611
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsVerificationSetupModule, declarations: [EmailComponent,
1612
- VerifyComponent], imports: [CommonModule,
1358
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: FsVerificationSetupModule, imports: [CommonModule,
1613
1359
  FormsModule,
1614
1360
  MatButtonModule,
1615
1361
  MatCardModule,
@@ -1618,9 +1364,9 @@ class FsVerificationSetupModule {
1618
1364
  FsFormModule,
1619
1365
  FsSkeletonModule,
1620
1366
  FsLabelModule,
1621
- Fs2faVerificationMethodsModule,
1622
- Fs2faVerificationModule,
1623
- VerificationSetupRoutingModule] });
1367
+ VerificationSetupRoutingModule,
1368
+ EmailComponent,
1369
+ VerifyComponent] });
1624
1370
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsVerificationSetupModule, providers: [
1625
1371
  VerificationMethodData,
1626
1372
  VerificationSetupService,
@@ -1633,9 +1379,9 @@ class FsVerificationSetupModule {
1633
1379
  FsFormModule,
1634
1380
  FsSkeletonModule,
1635
1381
  FsLabelModule,
1636
- Fs2faVerificationMethodsModule,
1637
- Fs2faVerificationModule,
1638
- VerificationSetupRoutingModule] });
1382
+ VerificationSetupRoutingModule,
1383
+ EmailComponent,
1384
+ VerifyComponent] });
1639
1385
  }
1640
1386
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsVerificationSetupModule, decorators: [{
1641
1387
  type: NgModule,
@@ -1650,11 +1396,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1650
1396
  FsFormModule,
1651
1397
  FsSkeletonModule,
1652
1398
  FsLabelModule,
1653
- Fs2faVerificationMethodsModule,
1654
- Fs2faVerificationModule,
1655
1399
  VerificationSetupRoutingModule,
1656
- ],
1657
- declarations: [
1658
1400
  EmailComponent,
1659
1401
  VerifyComponent,
1660
1402
  ],
@@ -1690,5 +1432,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1690
1432
  * Generated bundle index. Do not edit.
1691
1433
  */
1692
1434
 
1693
- export { ForceVerificationSetupGuard, Fs2faManageComponent, Fs2faManageModule, Fs2faVerificationComponent, Fs2faVerificationMethodsModule, Fs2faVerificationModule, Fs2faVerificationResendDirective, FsVerificationSetupModule, VerificationMethodType, VerificationMethodsComponent };
1435
+ export { ForceVerificationSetupGuard, Fs2faManageComponent, Fs2faVerificationComponent, Fs2faVerificationResendDirective, FsVerificationSetupModule, VerificationMethodType, VerificationMethodsComponent };
1694
1436
  //# sourceMappingURL=firestitch-2fa.mjs.map