@firestitch/2fa 12.0.2 → 12.0.5

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 -196
  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 -171
  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 -8
  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 -99
  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,210 +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('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', '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.rxjs, global.rxjs.operators, global.i3));
5
- })(this, (function (exports, i0, i6, flexLayout, i1, i2$1, i7, i1$1, i5, i2, 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.deleteTrustedDevice = 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
- rowActions: [
77
- {
78
- click: function (data) {
79
- _this.signOutTrustedDevice(data)
80
- .subscribe(function () {
81
- _this.reload();
82
- });
83
- },
84
- menu: true,
85
- label: 'Sign Out',
86
- },
87
- {
88
- click: function (data) {
89
- _this.deleteTrustedDevice(data)
90
- .subscribe(function () {
91
- _this.reload();
92
- });
93
- },
94
- remove: {
95
- title: 'Confirm',
96
- template: 'Are you sure you would like to delete this trusted device?',
97
- },
98
- menu: true,
99
- label: 'Delete',
100
- },
101
- ],
102
- fetch: function (query) {
103
- return _this.fetchTrustedDevices(query)
104
- .pipe(operators.map(function (response) {
105
- return {
106
- data: response.data,
107
- paging: response.paging,
108
- };
109
- }));
110
- },
111
- };
112
- };
113
- FsTrustedDevicesComponent.prototype.reload = function () {
114
- this.listComponent.reload();
115
- };
116
- return FsTrustedDevicesComponent;
117
- }());
118
- 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 });
119
- FsTrustedDevicesComponent.ɵcmp = i0__namespace.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FsTrustedDevicesComponent, selector: "fs-trusted-devices", inputs: { fetchTrustedDevices: "fetchTrustedDevices", deleteTrustedDevice: "deleteTrustedDevice", 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 <!-- Use FsIp and pass in region, country, lat and lng -->\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 });
120
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: FsTrustedDevicesComponent, decorators: [{
121
- type: i0.Component,
122
- args: [{
123
- selector: 'fs-trusted-devices',
124
- templateUrl: './trusted-devices.component.html',
125
- styleUrls: ['./trusted-devices.component.scss'],
126
- changeDetection: i0.ChangeDetectionStrategy.OnPush,
127
- }]
128
- }], ctorParameters: function () { return [{ type: i1__namespace$1.FsCountry }]; }, propDecorators: { fetchTrustedDevices: [{
129
- type: i0.Input
130
- }], deleteTrustedDevice: [{
131
- type: i0.Input
132
- }], signOutTrustedDevice: [{
133
- type: i0.Input
134
- }], showAccount: [{
135
- type: i0.Input
136
- }], listComponent: [{
137
- type: i0.ViewChild,
138
- args: [i2$1.FsListComponent]
139
- }] } });
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 = {}));
140
50
 
141
- var Fs2FaModule = /** @class */ (function () {
142
- function Fs2FaModule() {
143
- }
144
- Fs2FaModule.forRoot = function () {
145
- return {
146
- ngModule: Fs2FaModule,
147
- };
148
- };
149
- return Fs2FaModule;
150
- }());
151
- Fs2FaModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
152
- Fs2FaModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, declarations: [FsTrustedDevicesComponent,
153
- FsTrustedCurrentDeviceComponent], imports: [i6.CommonModule,
154
- flexLayout.FlexLayoutModule,
155
- i1.MatIconModule,
156
- i2.MatTooltipModule,
157
- i2$1.FsListModule,
158
- i7.FsDateModule,
159
- i1$1.FsCountryModule,
160
- i5.FsDeviceModule,
161
- i3.FsBadgeModule], exports: [FsTrustedDevicesComponent,
162
- FsTrustedCurrentDeviceComponent] });
163
- Fs2FaModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, imports: [[
164
- i6.CommonModule,
165
- flexLayout.FlexLayoutModule,
166
- i1.MatIconModule,
167
- i2.MatTooltipModule,
168
- i2$1.FsListModule,
169
- i7.FsDateModule,
170
- i1$1.FsCountryModule,
171
- i5.FsDeviceModule,
172
- i3.FsBadgeModule,
173
- ]] });
174
- i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0__namespace, type: Fs2FaModule, decorators: [{
175
- type: i0.NgModule,
176
- args: [{
177
- imports: [
178
- i6.CommonModule,
179
- flexLayout.FlexLayoutModule,
180
- i1.MatIconModule,
181
- i2.MatTooltipModule,
182
- i2$1.FsListModule,
183
- i7.FsDateModule,
184
- i1$1.FsCountryModule,
185
- i5.FsDeviceModule,
186
- i3.FsBadgeModule,
187
- ],
188
- exports: [
189
- FsTrustedDevicesComponent,
190
- FsTrustedCurrentDeviceComponent,
191
- ],
192
- declarations: [
193
- FsTrustedDevicesComponent,
194
- FsTrustedCurrentDeviceComponent,
195
- ],
196
- }]
197
- }] });
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\" [dirtySubmitButton]=\"false\">\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
+ */
198
338
 
199
- /**
200
- * Generated bundle index. Do not edit.
201
- */
339
+ /**
340
+ * Generated bundle index. Do not edit.
341
+ */
202
342
 
203
- exports.Fs2FaModule = Fs2FaModule;
204
- exports.FsTrustedCurrentDeviceComponent = FsTrustedCurrentDeviceComponent;
205
- exports.FsTrustedDevicesComponent = FsTrustedDevicesComponent;
343
+ exports.FS_2FA_VERIFICATION_PROVIDER = FS_2FA_VERIFICATION_PROVIDER;
344
+ exports.Fs2FAVerificationComponent = Fs2FAVerificationComponent;
345
+ exports.Fs2FaModule = Fs2FaModule;
206
346
 
207
- Object.defineProperty(exports, '__esModule', { value: true });
347
+ Object.defineProperty(exports, '__esModule', { value: true });
208
348
 
209
349
  }));
210
350
  //# sourceMappingURL=firestitch-2fa.umd.js.map