@firestitch/2fa 12.0.1 → 12.0.4

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 (39) hide show
  1. package/app/components/2fa-verification/2fa-verification.component.d.ts +26 -0
  2. package/app/components/2fa-verification-code/2fa-verification-code.component.d.ts +11 -0
  3. package/app/components/2fa-verification-methods/2fa-verification-methods.component.d.ts +23 -0
  4. package/app/components/2fa-verification-otp/2fa-verification-otp.component.d.ts +12 -0
  5. package/app/enums/verification-method-type.enum.d.ts +6 -0
  6. package/app/fs-2fa.module.d.ts +23 -19
  7. package/app/interfaces/verification-method.interface.d.ts +11 -0
  8. package/app/interfaces/verification-provider.interface.d.ts +8 -0
  9. package/app/tokens/verification.token.d.ts +3 -0
  10. package/bundles/firestitch-2fa.umd.js +336 -203
  11. package/bundles/firestitch-2fa.umd.js.map +1 -1
  12. package/esm2015/app/components/2fa-verification/2fa-verification.component.js +92 -0
  13. package/esm2015/app/components/2fa-verification-code/2fa-verification-code.component.js +45 -0
  14. package/esm2015/app/components/2fa-verification-methods/2fa-verification-methods.component.js +73 -0
  15. package/esm2015/app/components/2fa-verification-otp/2fa-verification-otp.component.js +33 -0
  16. package/esm2015/app/enums/verification-method-type.enum.js +8 -0
  17. package/esm2015/app/fs-2fa.module.js +91 -68
  18. package/esm2015/app/interfaces/verification-method.interface.js +2 -0
  19. package/esm2015/app/interfaces/verification-provider.interface.js +2 -0
  20. package/esm2015/app/tokens/verification.token.js +3 -0
  21. package/esm2015/firestitch-2fa.js +4 -4
  22. package/esm2015/public_api.js +9 -4
  23. package/fesm2015/firestitch-2fa.js +310 -179
  24. package/fesm2015/firestitch-2fa.js.map +1 -1
  25. package/firestitch-2fa.d.ts +5 -5
  26. package/package.json +5 -2
  27. package/public_api.d.ts +6 -7
  28. package/app/components/trusted-current-device/trusted-current-device.component.d.ts +0 -5
  29. package/app/components/trusted-devices/trusted-devices.component.d.ts +0 -26
  30. package/app/interfaces/trusted-device-account.d.ts +0 -6
  31. package/app/interfaces/trusted-device-device.d.ts +0 -10
  32. package/app/interfaces/trusted-device-ip.d.ts +0 -5
  33. package/app/interfaces/trusted-device.d.ts +0 -14
  34. package/esm2015/app/components/trusted-current-device/trusted-current-device.component.js +0 -18
  35. package/esm2015/app/components/trusted-devices/trusted-devices.component.js +0 -107
  36. package/esm2015/app/interfaces/trusted-device-account.js +0 -2
  37. package/esm2015/app/interfaces/trusted-device-device.js +0 -2
  38. package/esm2015/app/interfaces/trusted-device-ip.js +0 -2
  39. package/esm2015/app/interfaces/trusted-device.js +0 -2
@@ -1,217 +1,350 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/flex-layout'), require('@angular/material/icon'), require('@firestitch/list'), require('@firestitch/date'), require('@firestitch/country'), require('@firestitch/device'), require('@angular/material/tooltip'), require('@firestitch/filter'), require('rxjs'), require('rxjs/operators'), require('@firestitch/badge')) :
3
- typeof define === 'function' && define.amd ? define('@firestitch/2fa', ['exports', '@angular/core', '@angular/common', '@angular/flex-layout', '@angular/material/icon', '@firestitch/list', '@firestitch/date', '@firestitch/country', '@firestitch/device', '@angular/material/tooltip', '@firestitch/filter', 'rxjs', 'rxjs/operators', '@firestitch/badge'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch["2fa"] = {}), global.ng.core, global.ng.common, global.ng.flexLayout, global.ng.material.icon, global.i2$1, global.i7, global.i1$1, global.i5, global.ng.material.tooltip, global.filter, global.rxjs, global.rxjs.operators, global.i3));
5
- })(this, (function (exports, i0, i6, flexLayout, i1, i2$1, i7, i1$1, i5, i2, filter, rxjs, operators, i3) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('@angular/common'), require('@angular/material/icon'), require('@angular/material/radio'), require('@angular/material/button'), require('@angular/material/form-field'), require('@angular/material/input'), require('@angular/material/checkbox'), require('@angular/material/progress-spinner'), require('@firestitch/form'), require('@firestitch/skeleton'), require('@firestitch/radiogroup'), require('@firestitch/dialog'), require('rxjs/operators'), require('@angular/material/dialog'), require('rxjs')) :
3
+ typeof define === 'function' && define.amd ? define('@firestitch/2fa', ['exports', '@angular/core', '@angular/forms', '@angular/common', '@angular/material/icon', '@angular/material/radio', '@angular/material/button', '@angular/material/form-field', '@angular/material/input', '@angular/material/checkbox', '@angular/material/progress-spinner', '@firestitch/form', '@firestitch/skeleton', '@firestitch/radiogroup', '@firestitch/dialog', 'rxjs/operators', '@angular/material/dialog', 'rxjs'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.firestitch = global.firestitch || {}, global.firestitch["2fa"] = {}), global.ng.core, global.ng.forms, global.ng.common, global.ng.material.icon, global.ng.material.radio, global.ng.material.button, global.ng.material.formField, global.ng.material.input, global.ng.material.checkbox, global.ng.material.progressSpinner, global.i8, global.i9, global.i3, global.i1$1, global.rxjs.operators, global.ng.material.dialog, global.rxjs));
5
+ })(this, (function (exports, i0, i7, i10, i4, i5, i5$1, i1$2, i3$1, i4$1, i6, i8, i9, i3, i1$1, operators, i1, rxjs) { 'use strict';
6
6
 
7
- function _interopNamespace(e) {
8
- if (e && e.__esModule) return e;
9
- var n = Object.create(null);
10
- if (e) {
11
- Object.keys(e).forEach(function (k) {
12
- if (k !== 'default') {
13
- var d = Object.getOwnPropertyDescriptor(e, k);
14
- Object.defineProperty(n, k, d.get ? d : {
15
- enumerable: true,
16
- get: function () { return e[k]; }
17
- });
18
- }
19
- });
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
20
18
  }
21
- n["default"] = e;
22
- return Object.freeze(n);
19
+ });
23
20
  }
21
+ n["default"] = e;
22
+ return Object.freeze(n);
23
+ }
24
24
 
25
- var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
26
- var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
27
- var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
28
- var i2__namespace$1 = /*#__PURE__*/_interopNamespace(i2$1);
29
- var i7__namespace = /*#__PURE__*/_interopNamespace(i7);
30
- var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
31
- var i5__namespace = /*#__PURE__*/_interopNamespace(i5);
32
- var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
33
- var i3__namespace = /*#__PURE__*/_interopNamespace(i3);
25
+ var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
26
+ var i7__namespace = /*#__PURE__*/_interopNamespace(i7);
27
+ var i10__namespace = /*#__PURE__*/_interopNamespace(i10);
28
+ var i4__namespace = /*#__PURE__*/_interopNamespace(i4);
29
+ var i5__namespace = /*#__PURE__*/_interopNamespace(i5);
30
+ var i5__namespace$1 = /*#__PURE__*/_interopNamespace(i5$1);
31
+ var i1__namespace$2 = /*#__PURE__*/_interopNamespace(i1$2);
32
+ var i3__namespace$1 = /*#__PURE__*/_interopNamespace(i3$1);
33
+ var i4__namespace$1 = /*#__PURE__*/_interopNamespace(i4$1);
34
+ var i6__namespace = /*#__PURE__*/_interopNamespace(i6);
35
+ var i8__namespace = /*#__PURE__*/_interopNamespace(i8);
36
+ var i9__namespace = /*#__PURE__*/_interopNamespace(i9);
37
+ var i3__namespace = /*#__PURE__*/_interopNamespace(i3);
38
+ var i1__namespace$1 = /*#__PURE__*/_interopNamespace(i1$1);
39
+ var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
34
40
 
35
- var FsTrustedCurrentDeviceComponent = /** @class */ (function () {
36
- function FsTrustedCurrentDeviceComponent() {
37
- }
38
- return FsTrustedCurrentDeviceComponent;
39
- }());
40
- FsTrustedCurrentDeviceComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsTrustedCurrentDeviceComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
41
- FsTrustedCurrentDeviceComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsTrustedCurrentDeviceComponent, selector: "fs-trusted-current-device", ngImport: i0__namespace, template: "\n<div class=\"current-device\">\n <mat-icon class=\"circle\">circle</mat-icon>\n <mat-icon \n class=\"check\"\n matTooltip=\"This device\">\n check_circle\n </mat-icon>\n</div>\n", styles: [".current-device{transform:scale(.8);z-index:1;position:relative}.current-device .check,.current-device .circle{position:absolute;color:#027db4;top:0}.current-device .circle{color:#fff}\n"], components: [{ type: i1__namespace.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2__namespace.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
42
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsTrustedCurrentDeviceComponent, decorators: [{
43
- type: i0.Component,
44
- args: [{
45
- selector: 'fs-trusted-current-device',
46
- templateUrl: './trusted-current-device.component.html',
47
- styleUrls: ['./trusted-current-device.component.scss'],
48
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
49
- }]
50
- }] });
41
+ var FS_2FA_VERIFICATION_PROVIDER = new i0.InjectionToken('Provider for Verification service');
51
42
 
52
- var FsTrustedDevicesComponent = /** @class */ (function () {
53
- function FsTrustedDevicesComponent(_fsCountry) {
54
- this._fsCountry = _fsCountry;
55
- this.fetchTrustedDevices = function (query) { return new rxjs.Observable(); };
56
- this.removeTrustedDevice = function (trustedDevice) { return new rxjs.Observable(); };
57
- this.signOutTrustedDevice = function (trustedDevice) { return new rxjs.Observable(); };
58
- this.showAccount = true;
59
- this._destroy$ = new rxjs.Subject();
60
- }
61
- FsTrustedDevicesComponent.prototype.ngOnInit = function () {
62
- var _this = this;
63
- this._fsCountry.ready$
64
- .pipe(operators.takeUntil(this._destroy$))
65
- .subscribe(function () {
66
- _this._initListConfig();
67
- });
68
- };
69
- FsTrustedDevicesComponent.prototype.ngOnDestroy = function () {
70
- this._destroy$.next();
71
- this._destroy$.complete();
72
- };
73
- FsTrustedDevicesComponent.prototype._initListConfig = function () {
74
- var _this = this;
75
- this.listConfig = {
76
- filters: [
77
- {
78
- name: 'keyword',
79
- type: filter.ItemType.Keyword,
80
- label: 'Search',
81
- },
82
- ],
83
- rowActions: [
84
- {
85
- click: function (data) {
86
- _this.signOutTrustedDevice(data)
87
- .subscribe(function () {
88
- _this.reload();
89
- });
90
- },
91
- menu: true,
92
- label: 'Sign Out',
93
- },
94
- {
95
- click: function (data) {
96
- _this.removeTrustedDevice(data)
97
- .subscribe(function () {
98
- _this.reload();
99
- });
100
- },
101
- remove: {
102
- title: 'Confirm',
103
- template: 'Are you sure you would like to delete this record?',
104
- },
105
- menu: true,
106
- label: 'Delete',
107
- },
108
- ],
109
- fetch: function (query) {
110
- return _this.fetchTrustedDevices(query)
111
- .pipe(operators.map(function (response) {
112
- return {
113
- data: response.data,
114
- paging: response.paging,
115
- };
116
- }));
117
- },
118
- };
119
- };
120
- FsTrustedDevicesComponent.prototype.reload = function () {
121
- this.listComponent.reload();
122
- };
123
- return FsTrustedDevicesComponent;
124
- }());
125
- FsTrustedDevicesComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsTrustedDevicesComponent, deps: [{ token: i1__namespace$1.FsCountry }], target: i0__namespace.ɵɵFactoryTarget.Component });
126
- FsTrustedDevicesComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsTrustedDevicesComponent, selector: "fs-trusted-devices", inputs: { fetchTrustedDevices: "fetchTrustedDevices", removeTrustedDevice: "removeTrustedDevice", signOutTrustedDevice: "signOutTrustedDevice", showAccount: "showAccount" }, viewQueries: [{ propertyName: "listComponent", first: true, predicate: i2$1.FsListComponent, descendants: true }], ngImport: i0__namespace, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Account\" [show]=\"showAccount\">\n <ng-template fs-list-cell let-row=\"row\" class=\"col-account\">\n <div *ngIf=\"row.account\" class=\"row\">\n <fs-badge \n *ngIf=\"row.account.avatarUrl\"\n shape=\"circle\" \n image=\"{{ row.account.avatarUrl }}\">\n </fs-badge>\n <div>\n {{ row.account.name }}\n <div class=\"small\" *ngIf=\"row.account.email\">{{ row.account.email }}</div> \n </div>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Device\">\n <ng-template fs-list-cell let-row=\"row\" class=\"col-device\">\n <div class=\"device\" *ngIf=\"row.device\">\n <fs-trusted-current-device *ngIf=\"row.currentDevice\"></fs-trusted-current-device>\n <fs-device-os\n [type]=\"row.device.type\"\n [os]=\"row.device.osType\"\n [version]=\"row.device.osVersion\">\n </fs-device-os>\n </div> \n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Browser\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-device-browser\n *ngIf=\"row.device\"\n [type]=\"row.device.browserType\"\n [version]=\"row.device.browserVersion\"\n [showName]=\"true\"\n ></fs-device-browser>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Added\">\n <ng-template fs-list-cell let-row=\"row\">\n {{ row.createDate | fsDateAgo }}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Location\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-country [code]=\"row.ip.country\"></fs-country>\n <div><small>{{row.ip.ip}}</small></div>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Last signed in\">\n <ng-template fs-list-cell let-row=\"row\">\n {{ row.activityDate | fsDateAgo }}\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [":host ::ng-deep .col-account .row{display:flex;align-items:center}:host ::ng-deep .col-account .row fs-badge{margin-right:5px}:host ::ng-deep .col-device .device{position:relative;display:inline-block}:host ::ng-deep .col-device .device .current-device{right:8px;top:-8px;position:absolute}\n"], components: [{ type: i2__namespace$1.FsListComponent, selector: "fs-list", inputs: ["loaderLines", "config"], outputs: ["filtersReady"] }, { type: i3__namespace.FsBadgeComponent, selector: "fs-badge", inputs: ["text", "shape", "color", "tooltip", "size", "image", "icon", "iconSize", "iconColor", "backgroundSize"] }, { type: FsTrustedCurrentDeviceComponent, selector: "fs-trusted-current-device" }, { type: i5__namespace.FsDeviceOsComponent, selector: "fs-device-os", inputs: ["type", "os", "showName", "version"] }, { type: i5__namespace.FsDeviceBrowserComponent, selector: "fs-device-browser", inputs: ["type", "version", "showName"] }, { type: i1__namespace$1.FsCountryComponent, selector: "fs-country", inputs: ["showIcon", "showName", "width", "code"] }], directives: [{ type: i2__namespace$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "customize", "title", "name", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2__namespace$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i6__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateAgo": i7__namespace.FsDateAgoPipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
127
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsTrustedDevicesComponent, decorators: [{
128
- type: i0.Component,
129
- args: [{
130
- selector: 'fs-trusted-devices',
131
- templateUrl: './trusted-devices.component.html',
132
- styleUrls: ['./trusted-devices.component.scss'],
133
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
134
- }]
135
- }], ctorParameters: function () { return [{ type: i1__namespace$1.FsCountry }]; }, propDecorators: { fetchTrustedDevices: [{
136
- type: i0.Input
137
- }], removeTrustedDevice: [{
138
- type: i0.Input
139
- }], signOutTrustedDevice: [{
140
- type: i0.Input
141
- }], showAccount: [{
142
- type: i0.Input
143
- }], listComponent: [{
144
- type: i0.ViewChild,
145
- args: [i2$1.FsListComponent]
146
- }] } });
43
+ exports.FsVerificationMethodType = void 0;
44
+ (function (FsVerificationMethodType) {
45
+ FsVerificationMethodType["Sms"] = "sms";
46
+ FsVerificationMethodType["Email"] = "email";
47
+ FsVerificationMethodType["Authenticator"] = "authenticator";
48
+ FsVerificationMethodType["Code"] = "code";
49
+ })(exports.FsVerificationMethodType || (exports.FsVerificationMethodType = {}));
147
50
 
148
- var Fs2FaModule = /** @class */ (function () {
149
- function Fs2FaModule() {
150
- }
151
- Fs2FaModule.forRoot = function () {
152
- return {
153
- ngModule: Fs2FaModule,
154
- };
155
- };
156
- return Fs2FaModule;
157
- }());
158
- Fs2FaModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
159
- Fs2FaModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, declarations: [FsTrustedDevicesComponent,
160
- FsTrustedCurrentDeviceComponent], imports: [i6.CommonModule,
161
- flexLayout.FlexLayoutModule,
162
- i1.MatIconModule,
163
- i2.MatTooltipModule,
164
- i2$1.FsListModule,
165
- i7.FsDateModule,
166
- i1$1.FsCountryModule,
167
- i5.FsDeviceModule,
168
- i3.FsBadgeModule], exports: [FsTrustedDevicesComponent,
169
- FsTrustedCurrentDeviceComponent] });
170
- Fs2FaModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, imports: [[
171
- i6.CommonModule,
172
- flexLayout.FlexLayoutModule,
173
- i1.MatIconModule,
174
- i2.MatTooltipModule,
175
- i2$1.FsListModule,
176
- i7.FsDateModule,
177
- i1$1.FsCountryModule,
178
- i5.FsDeviceModule,
179
- i3.FsBadgeModule,
180
- ]] });
181
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, decorators: [{
182
- type: i0.NgModule,
183
- args: [{
184
- imports: [
185
- i6.CommonModule,
186
- flexLayout.FlexLayoutModule,
187
- i1.MatIconModule,
188
- i2.MatTooltipModule,
189
- i2$1.FsListModule,
190
- i7.FsDateModule,
191
- i1$1.FsCountryModule,
192
- i5.FsDeviceModule,
193
- i3.FsBadgeModule,
194
- ],
195
- exports: [
196
- FsTrustedDevicesComponent,
197
- FsTrustedCurrentDeviceComponent,
198
- ],
199
- declarations: [
200
- FsTrustedDevicesComponent,
201
- FsTrustedCurrentDeviceComponent,
202
- ],
203
- }]
204
- }] });
51
+ var Fs2FaVerificationMethodsComponent = /** @class */ (function () {
52
+ function Fs2FaVerificationMethodsComponent(_verificationProvider, _dialogData, _dialogRef) {
53
+ var _this = this;
54
+ this._verificationProvider = _verificationProvider;
55
+ this._dialogData = _dialogData;
56
+ this._dialogRef = _dialogRef;
57
+ this.verificationMethodType = exports.FsVerificationMethodType;
58
+ this.setVerificationMethod = function () {
59
+ return _this._verificationProvider
60
+ .updateVerificationMethod(_this.method.id)
61
+ .pipe(operators.tap(function (method) {
62
+ _this._dialogRef.close(method);
63
+ }));
64
+ };
65
+ this._setActiveMethod();
66
+ this._initMethods();
67
+ }
68
+ Fs2FaVerificationMethodsComponent.prototype.compareWith = function (o1, o2) {
69
+ return o1 && o2 && o1.id === o2.id;
70
+ };
71
+ Fs2FaVerificationMethodsComponent.prototype._setActiveMethod = function () {
72
+ var _a;
73
+ this.method = (_a = this._dialogData) === null || _a === void 0 ? void 0 : _a.method;
74
+ };
75
+ Fs2FaVerificationMethodsComponent.prototype._initMethods = function () {
76
+ this.methods$ = this._verificationProvider
77
+ .methods()
78
+ .pipe(operators.map(function (methods) {
79
+ return methods
80
+ .reduce(function (acc, method) {
81
+ if (!acc[method.type]) {
82
+ acc[method.type] = [];
83
+ }
84
+ acc[method.type].push(method);
85
+ return acc;
86
+ }, {});
87
+ }), operators.shareReplay(1));
88
+ };
89
+ return Fs2FaVerificationMethodsComponent;
90
+ }());
91
+ Fs2FaVerificationMethodsComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaVerificationMethodsComponent, deps: [{ token: FS_2FA_VERIFICATION_PROVIDER }, { token: i1.MAT_DIALOG_DATA }, { token: i1__namespace.MatDialogRef }], target: i0__namespace.ɵɵFactoryTarget.Component });
92
+ Fs2FaVerificationMethodsComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FaVerificationMethodsComponent, selector: "ng-component", ngImport: i0__namespace, template: "<fs-dialog>\n <h1 mat-dialog-title>\n Verification Methods\n </h1>\n <form fsForm [submit]=\"setVerificationMethod\">\n <mat-dialog-content>\n <ng-container *fsSkeleton=\"methods$ | async as methods\">\n <fs-radio-group [(ngModel)]=\"method\" name=\"method\" [compareWith]=\"compareWith\">\n <ng-container *ngFor=\"let methodMap of methods | 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 smartphone\n </mat-icon>\n </div>\n <div class=\"method-name\">\n <div class=\"method-title\">Text Message</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following mobile number\n </div>\n </div>\n </div>\n </ng-container>\n\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\">Email</div>\n <div class=\"method-subtitle\">\n Verification code send to one of following email\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container [ngSwitch]=\"methodMap.key\">\n <ng-container *ngSwitchCase=\"verificationMethodType.Sms\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n {{ method.phoneNumber }}\n </mat-radio-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"verificationMethodType.Email\">\n <mat-radio-button class=\"method-item\" *ngFor=\"let method of methodMap.value\" [value]=\"method\">\n {{ method.email }}\n </mat-radio-button>\n </ng-container>\n </ng-container>\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 <ng-container *ngIf=\"methods$ | async\">\n <button mat-button type=\"submit\" color=\"primary\">Next</button>\n </ng-container>\n <button mat-button type=\"button\" [mat-dialog-close]=\"null\">Cancel</button>\n </div>\n </mat-dialog-actions>\n </form>\n</fs-dialog>\n", 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"], components: [{ type: i1__namespace$1.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i3__namespace.FsRadioGroupComponent, selector: "fs-radio-group", inputs: ["orientation", "radioPosition", "compareWith", "required", "disabled", "label", "name"] }, { type: i4__namespace.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5__namespace.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i5__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1__namespace.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7__namespace.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7__namespace.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7__namespace.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8__namespace.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i1__namespace.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9__namespace.ɵa, selector: "[fsSkeleton]", inputs: ["fsSkeletonPattern", "fsSkeleton"] }, { type: i7__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10__namespace.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10__namespace.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10__namespace.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i1__namespace.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i10__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8__namespace.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }, { type: i1__namespace.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "async": i10__namespace.AsyncPipe, "keyvalue": i10__namespace.KeyValuePipe }, changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
93
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaVerificationMethodsComponent, decorators: [{
94
+ type: i0.Component,
95
+ args: [{
96
+ templateUrl: './2fa-verification-methods.component.html',
97
+ styleUrls: [
98
+ './2fa-verification-methods.component.scss',
99
+ ],
100
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
101
+ }]
102
+ }], ctorParameters: function () {
103
+ return [{ type: undefined, decorators: [{
104
+ type: i0.Inject,
105
+ args: [FS_2FA_VERIFICATION_PROVIDER]
106
+ }] }, { type: undefined, decorators: [{
107
+ type: i0.Inject,
108
+ args: [i1.MAT_DIALOG_DATA]
109
+ }] }, { type: i1__namespace.MatDialogRef }];
110
+ } });
111
+
112
+ var Fs2FAVerificationOTPComponent = /** @class */ (function () {
113
+ function Fs2FAVerificationOTPComponent(form) {
114
+ this.form = form;
115
+ this.codeChange = new i0.EventEmitter();
116
+ }
117
+ Fs2FAVerificationOTPComponent.prototype.codeChanged = function (event) {
118
+ this.codeChange.emit(event);
119
+ this.form.dirty();
120
+ };
121
+ Fs2FAVerificationOTPComponent.prototype.codeCompleted = function () {
122
+ this.form.triggerSubmit();
123
+ };
124
+ return Fs2FAVerificationOTPComponent;
125
+ }());
126
+ Fs2FAVerificationOTPComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationOTPComponent, deps: [{ token: i8__namespace.FsFormDirective }], target: i0__namespace.ɵɵFactoryTarget.Component });
127
+ Fs2FAVerificationOTPComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationOTPComponent, selector: "fs-2fa-verification-otp", outputs: { codeChange: "codeChange" }, ngImport: i0__namespace, template: "<p class=\"description\">\n Enter the verification code generated by your 2 factor authenticator\n app to verify it's you\n</p>\n\n<!--\n<code-input [initialFocusField]=\"0\"\n [codeLength]=\"6\"\n (codeChanged)=\"codeChanged($event)\"\n (codeCompleted)=\"codeCompleted()\">>\n</code-input>\n-->\n", styles: [":host{display:block}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"], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
128
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationOTPComponent, decorators: [{
129
+ type: i0.Component,
130
+ args: [{
131
+ selector: 'fs-2fa-verification-otp',
132
+ templateUrl: './2fa-verification-otp.component.html',
133
+ styleUrls: [
134
+ './2fa-verification-otp.component.scss'
135
+ ],
136
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
137
+ }]
138
+ }], ctorParameters: function () { return [{ type: i8__namespace.FsFormDirective }]; }, propDecorators: { codeChange: [{
139
+ type: i0.Output
140
+ }] } });
141
+
142
+ var Fs2FAVerificationSMSComponent = /** @class */ (function () {
143
+ function Fs2FAVerificationSMSComponent() {
144
+ this.codeChange = new i0.EventEmitter();
145
+ }
146
+ Fs2FAVerificationSMSComponent.prototype.codeChanged = function () {
147
+ this.codeChange.emit(this.code);
148
+ };
149
+ return Fs2FAVerificationSMSComponent;
150
+ }());
151
+ Fs2FAVerificationSMSComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationSMSComponent, deps: [], target: i0__namespace.ɵɵFactoryTarget.Component });
152
+ Fs2FAVerificationSMSComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationSMSComponent, selector: "fs-2fa-verification-code", inputs: { method: "method" }, outputs: { codeChange: "codeChange" }, ngImport: i0__namespace, template: "<p class=\"description\">\n <ng-container *ngIf=\"method.phoneNumber && method.type === 'sms'\">\n A text message with a verification code was just\n sent to <span style=\"white-space: nowrap;\">{{ method.phoneNumber }}</span> to verify it's you.\n </ng-container>\n\n <ng-container *ngIf=\"method.type === 'email'\">\n A email with a verification code was just sent to {{ method.email }} to verify it's you.\n </ng-container>\n\n <ng-container *ngIf=\"false\">\n Enter the one time code generated by the app administrator to verify it's you.\n </ng-container>\n</p>\n\n<mat-form-field>\n <mat-label>Code</mat-label>\n <input type=\"text\"\n matInput\n name=\"code\"\n autocomplete=\"one-time-code\"\n [(ngModel)]=\"code\"\n (ngModelChange)=\"codeChanged()\"\n required\n placeholder=\"Enter the code\"\n inputmode=\"numeric\">\n</mat-form-field>\n", styles: [":host{display:block}mat-form-field{width:100%}\n"], components: [{ type: i1__namespace$2.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }], directives: [{ type: i10__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1__namespace$2.MatLabel, selector: "mat-label" }, { type: i3__namespace$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i7__namespace.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7__namespace.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i7__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8__namespace.ɵf, selector: "[fsFormRequired],[ngModel][required]", inputs: ["fsFormRequired", "required", "fsFormRequiredMessage"] }], viewProviders: [
153
+ {
154
+ provide: i7.ControlContainer,
155
+ useExisting: i7.NgForm,
156
+ },
157
+ ], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
158
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationSMSComponent, decorators: [{
159
+ type: i0.Component,
160
+ args: [{
161
+ selector: 'fs-2fa-verification-code',
162
+ templateUrl: './2fa-verification-code.component.html',
163
+ styleUrls: [
164
+ './2fa-verification-code.component.scss',
165
+ ],
166
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
167
+ viewProviders: [
168
+ {
169
+ provide: i7.ControlContainer,
170
+ useExisting: i7.NgForm,
171
+ },
172
+ ],
173
+ }]
174
+ }], propDecorators: { method: [{
175
+ type: i0.Input
176
+ }], codeChange: [{
177
+ type: i0.Output
178
+ }] } });
179
+
180
+ var Fs2FAVerificationComponent = /** @class */ (function () {
181
+ function Fs2FAVerificationComponent(verificationProvider, _cdRef, _dialog) {
182
+ var _this = this;
183
+ this.verificationProvider = verificationProvider;
184
+ this._cdRef = _cdRef;
185
+ this._dialog = _dialog;
186
+ this.verified = new i0.EventEmitter();
187
+ this.backToSignIn = new i0.EventEmitter();
188
+ this.resendInProgress = false;
189
+ this.trustedDevice = false;
190
+ this._destroy$ = new rxjs.Subject();
191
+ this.verify = function () {
192
+ return _this.verificationProvider
193
+ .verify(_this._code, _this.trustedDevice)
194
+ .pipe(operators.tap(function (response) {
195
+ _this.verified.emit(response);
196
+ }));
197
+ };
198
+ }
199
+ Fs2FAVerificationComponent.prototype.ngOnDestroy = function () {
200
+ this._destroy$.next();
201
+ this._destroy$.complete();
202
+ };
203
+ Fs2FAVerificationComponent.prototype.codeChanged = function (code) {
204
+ this._code = code;
205
+ };
206
+ Fs2FAVerificationComponent.prototype.resend = function () {
207
+ var _this = this;
208
+ this.resendInProgress = true;
209
+ this.verificationProvider
210
+ .resend()
211
+ .pipe(operators.takeUntil(this._destroy$))
212
+ .subscribe(function () {
213
+ _this.resendInProgress = false;
214
+ _this._cdRef.markForCheck();
215
+ });
216
+ };
217
+ Fs2FAVerificationComponent.prototype.showVerificationMethods = function () {
218
+ var _this = this;
219
+ this._dialog.open(Fs2FaVerificationMethodsComponent, {
220
+ data: {
221
+ method: this.method,
222
+ }
223
+ })
224
+ .afterClosed()
225
+ .pipe(operators.filter(function (method) { return !!method; }))
226
+ .subscribe(function (method) {
227
+ _this.method = method;
228
+ _this._cdRef.markForCheck();
229
+ });
230
+ };
231
+ Fs2FAVerificationComponent.prototype.toSignIn = function () {
232
+ this.backToSignIn.emit();
233
+ };
234
+ return Fs2FAVerificationComponent;
235
+ }());
236
+ Fs2FAVerificationComponent.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationComponent, deps: [{ token: FS_2FA_VERIFICATION_PROVIDER }, { token: i0__namespace.ChangeDetectorRef }, { token: i1__namespace$1.FsDialog }], target: i0__namespace.ɵɵFactoryTarget.Component });
237
+ Fs2FAVerificationComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: Fs2FAVerificationComponent, selector: "fs-2fa-verification", inputs: { method: "method" }, outputs: { verified: "verified", backToSignIn: "backToSignIn" }, ngImport: i0__namespace, template: "<form fsForm [submit]=\"verify\" [dirtySubmitButton]=\"false\">\n <h2>2-Step Verification</h2>\n\n <div class=\"code-container\">\n <ng-container *ngIf=\"method.type === 'authenticator' else code\">\n <fs-2fa-verification-otp class=\"otp\"></fs-2fa-verification-otp>\n </ng-container>\n\n <ng-template #code>\n <fs-2fa-verification-code\n [method]=\"method\"\n (codeChange)=\"codeChanged($event)\">\n </fs-2fa-verification-code>\n </ng-template>\n </div>\n\n <div class=\"additional\">\n <mat-checkbox\n name=\"trust-device\"\n [(ngModel)]=\"trustedDevice\">\n Trust this device\n </mat-checkbox>\n\n <span matSuffix>\n <a mat-button\n type=\"button\"\n color=\"primary\"\n (click)=\"resend()\"\n [disabled]=\"resendInProgress\"\n class=\"resend-code-btn\">\n <ng-container *ngIf=\"!resendInProgress else sending\">\n Resend Code\n </ng-container>\n <ng-template #sending>\n <mat-spinner [diameter]=\"12\"></mat-spinner> Sending\n </ng-template>\n </a>\n </span>\n </div>\n\n <div class=\"actions\">\n <button mat-raised-button\n color=\"primary\"\n type=\"submit\">\n Verify\n </button>\n\n <button mat-button type=\"button\" (click)=\"showVerificationMethods()\">\n Try other ways to verify\n </button>\n\n <button mat-button type=\"button\" (click)=\"toSignIn()\">\n Back to signin\n </button>\n </div>\n</form>\n", styles: [":host{display:block}h2,.code-container{text-align:center}.code-container .otp{margin-bottom:15px}:host ::ng-deep .actions{margin:10px 0}:host ::ng-deep .actions a{width:100%;font-weight:400}:host ::ng-deep .actions button{width:100%;margin-bottom:5px}:host ::ng-deep .actions button[type=button]{font-weight:400}.additional{display:flex;justify-content:space-between;align-items:baseline;margin-top:-5px}.additional .resend-code-btn{text-transform:none}.additional .resend-code-btn mat-spinner{display:inline-block;vertical-align:middle}\n"], components: [{ type: Fs2FAVerificationOTPComponent, selector: "fs-2fa-verification-otp", outputs: ["codeChange"] }, { type: Fs2FAVerificationSMSComponent, selector: "fs-2fa-verification-code", inputs: ["method"], outputs: ["codeChange"] }, { type: i4__namespace$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "id", "labelPosition", "name", "required", "checked", "disabled", "indeterminate", "aria-describedby", "value"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i5__namespace$1.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { type: i6__namespace.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i5__namespace$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i7__namespace.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7__namespace.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7__namespace.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8__namespace.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "confirmTabs", "dirtySubmitButton", "successDelay", "errorDelay", "submit", "tabGroup"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"] }, { type: i10__namespace.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7__namespace.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7__namespace.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i1__namespace$2.MatSuffix, selector: "[matSuffix]" }, { type: i8__namespace.ɵw, selector: "button[type=\"submit\"]", inputs: ["dirtySubmit", "name"] }], changeDetection: i0__namespace.ChangeDetectionStrategy.OnPush });
238
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FAVerificationComponent, decorators: [{
239
+ type: i0.Component,
240
+ args: [{
241
+ selector: 'fs-2fa-verification',
242
+ templateUrl: './2fa-verification.component.html',
243
+ styleUrls: [
244
+ './2fa-verification.component.scss',
245
+ ],
246
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
247
+ }]
248
+ }], ctorParameters: function () {
249
+ return [{ type: undefined, decorators: [{
250
+ type: i0.Inject,
251
+ args: [FS_2FA_VERIFICATION_PROVIDER]
252
+ }] }, { type: i0__namespace.ChangeDetectorRef }, { type: i1__namespace$1.FsDialog }];
253
+ }, propDecorators: { method: [{
254
+ type: i0.Input
255
+ }], verified: [{
256
+ type: i0.Output
257
+ }], backToSignIn: [{
258
+ type: i0.Output
259
+ }] } });
260
+
261
+ var Fs2FaModule = /** @class */ (function () {
262
+ function Fs2FaModule() {
263
+ }
264
+ return Fs2FaModule;
265
+ }());
266
+ Fs2FaModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
267
+ Fs2FaModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, declarations: [Fs2FAVerificationComponent,
268
+ Fs2FAVerificationSMSComponent,
269
+ Fs2FAVerificationOTPComponent,
270
+ Fs2FaVerificationMethodsComponent], imports: [i10.CommonModule,
271
+ i7.FormsModule,
272
+ i1$2.MatFormFieldModule,
273
+ i3$1.MatInputModule,
274
+ i5$1.MatButtonModule,
275
+ i8.FsFormModule,
276
+ i3.FsRadioGroupModule,
277
+ i1$1.FsDialogModule,
278
+ // CodeInputModule,
279
+ i4$1.MatCheckboxModule,
280
+ i6.MatProgressSpinnerModule,
281
+ i9.FsSkeletonModule,
282
+ i9.FsSkeletonModule,
283
+ i4.MatIconModule,
284
+ i5.MatRadioModule], exports: [Fs2FAVerificationComponent] });
285
+ Fs2FaModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, providers: [], imports: [[
286
+ i10.CommonModule,
287
+ i7.FormsModule,
288
+ i1$2.MatFormFieldModule,
289
+ i3$1.MatInputModule,
290
+ i5$1.MatButtonModule,
291
+ i8.FsFormModule,
292
+ i3.FsRadioGroupModule,
293
+ i1$1.FsDialogModule,
294
+ // CodeInputModule,
295
+ i4$1.MatCheckboxModule,
296
+ i6.MatProgressSpinnerModule,
297
+ i9.FsSkeletonModule,
298
+ i9.FsSkeletonModule,
299
+ i4.MatIconModule,
300
+ i5.MatRadioModule,
301
+ ]] });
302
+ i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, decorators: [{
303
+ type: i0.NgModule,
304
+ args: [{
305
+ imports: [
306
+ i10.CommonModule,
307
+ i7.FormsModule,
308
+ i1$2.MatFormFieldModule,
309
+ i3$1.MatInputModule,
310
+ i5$1.MatButtonModule,
311
+ i8.FsFormModule,
312
+ i3.FsRadioGroupModule,
313
+ i1$1.FsDialogModule,
314
+ // CodeInputModule,
315
+ i4$1.MatCheckboxModule,
316
+ i6.MatProgressSpinnerModule,
317
+ i9.FsSkeletonModule,
318
+ i9.FsSkeletonModule,
319
+ i4.MatIconModule,
320
+ i5.MatRadioModule,
321
+ ],
322
+ declarations: [
323
+ Fs2FAVerificationComponent,
324
+ Fs2FAVerificationSMSComponent,
325
+ Fs2FAVerificationOTPComponent,
326
+ Fs2FaVerificationMethodsComponent,
327
+ ],
328
+ exports: [
329
+ Fs2FAVerificationComponent,
330
+ ],
331
+ providers: [],
332
+ }]
333
+ }] });
334
+
335
+ /*
336
+ * Public API Surface of fs-2fa
337
+ */
205
338
 
206
- /**
207
- * Generated bundle index. Do not edit.
208
- */
339
+ /**
340
+ * Generated bundle index. Do not edit.
341
+ */
209
342
 
210
- exports.Fs2FaModule = Fs2FaModule;
211
- exports.FsTrustedCurrentDeviceComponent = FsTrustedCurrentDeviceComponent;
212
- exports.FsTrustedDevicesComponent = FsTrustedDevicesComponent;
343
+ exports.FS_2FA_VERIFICATION_PROVIDER = FS_2FA_VERIFICATION_PROVIDER;
344
+ exports.Fs2FAVerificationComponent = Fs2FAVerificationComponent;
345
+ exports.Fs2FaModule = Fs2FaModule;
213
346
 
214
- Object.defineProperty(exports, '__esModule', { value: true });
347
+ Object.defineProperty(exports, '__esModule', { value: true });
215
348
 
216
349
  }));
217
350
  //# sourceMappingURL=firestitch-2fa.umd.js.map