ngx-scandoc 1.2.4 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/core/components/components.module.d.ts +10 -7
  2. package/core/components/manual-scan/manual-scan.component.d.ts +61 -0
  3. package/core/components/scan/scan.component.d.ts +21 -24
  4. package/core/components/scan-results/scan-results.component.d.ts +11 -4
  5. package/core/components/webcam/util/webcam.util.d.ts +1 -1
  6. package/core/components/webcam/webcam/webcam.component.d.ts +26 -180
  7. package/core/components/webcam/webcam.module.d.ts +2 -0
  8. package/core/interfaces/config.d.ts +4 -0
  9. package/dialogs/components/prompt-manual/prompt-manual.component.d.ts +12 -0
  10. package/dialogs/components/scan-profile/scan-profile.component.d.ts +6 -1
  11. package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +15 -61
  12. package/dialogs/dialogs.core.provider.d.ts +1 -0
  13. package/dialogs/dialogs.module.d.ts +12 -9
  14. package/esm2020/core/components/camera-switch/camera-switch.component.mjs +6 -4
  15. package/esm2020/core/components/components.module.mjs +32 -10
  16. package/esm2020/core/components/manual-scan/manual-scan.component.mjs +290 -0
  17. package/esm2020/core/components/scan/scan.component.mjs +301 -181
  18. package/esm2020/core/components/scan-results/scan-results.component.mjs +38 -12
  19. package/esm2020/core/components/webcam/util/webcam.util.mjs +7 -5
  20. package/esm2020/core/components/webcam/webcam/webcam.component.mjs +296 -772
  21. package/esm2020/core/components/webcam/webcam.module.mjs +8 -1
  22. package/esm2020/core/interfaces/config.mjs +1 -1
  23. package/esm2020/dialogs/components/confirm/confirm.component.mjs +3 -3
  24. package/esm2020/dialogs/components/prompt-manual/prompt-manual.component.mjs +30 -0
  25. package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +36 -17
  26. package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +41 -336
  27. package/esm2020/dialogs/dialogs.core.provider.mjs +12 -1
  28. package/esm2020/dialogs/dialogs.module.mjs +24 -11
  29. package/esm2020/forms/types/avatar.type.mjs +26 -21
  30. package/esm2020/forms/types/profile.image.type.mjs +51 -41
  31. package/esm2020/forms/types/title.type.mjs +7 -35
  32. package/esm2020/lib/ngx-scandoc.module.mjs +8 -6
  33. package/esm2020/providers/auth.provider.mjs +15 -2
  34. package/esm2020/providers/camera.provider.mjs +37 -4
  35. package/esm2020/providers/interceptor.provider.mjs +2 -3
  36. package/esm2020/providers/layout.provider.mjs +7 -5
  37. package/esm2020/providers/scan.form.mjs +173 -215
  38. package/esm2020/providers/scan.provider.mjs +264 -7
  39. package/esm2020/providers/translation.provider.mjs +18 -23
  40. package/esm2020/public-api.mjs +3 -1
  41. package/fesm2015/ngx-scandoc.mjs +1733 -1989
  42. package/fesm2015/ngx-scandoc.mjs.map +1 -1
  43. package/fesm2020/ngx-scandoc.mjs +1728 -1981
  44. package/fesm2020/ngx-scandoc.mjs.map +1 -1
  45. package/forms/types/avatar.type.d.ts +1 -0
  46. package/forms/types/profile.image.type.d.ts +6 -1
  47. package/lib/ngx-scandoc.module.d.ts +2 -3
  48. package/package.json +1 -1
  49. package/providers/camera.provider.d.ts +17 -1
  50. package/providers/layout.provider.d.ts +3 -1
  51. package/providers/scan.form.d.ts +2 -0
  52. package/providers/scan.provider.d.ts +6 -1
  53. package/public-api.d.ts +2 -0
  54. package/src/assets/i18n/en.json +14 -3
@@ -1,33 +1,59 @@
1
1
  import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { BaseComponent } from '../base.component';
2
4
  import * as i0 from "@angular/core";
3
5
  import * as i1 from "../../../providers/camera.provider";
4
6
  import * as i2 from "../../../providers/scan.form";
5
- import * as i3 from "@angular/common";
6
- import * as i4 from "@angular/forms";
7
- import * as i5 from "@angular/material/card";
8
- import * as i6 from "@angular/material/button";
7
+ import * as i3 from "../../../providers/scan.provider";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "@angular/material/card";
9
11
  import * as i7 from "@ngx-formly/core";
10
12
  import * as i8 from "@ngx-translate/core";
11
- export class ScanResultsComponent {
12
- constructor(cameraProvider, formProvider) {
13
+ export class ScanResultsComponent extends BaseComponent {
14
+ constructor(cameraProvider, formProvider, provider, cd, zone) {
15
+ super();
13
16
  this.cameraProvider = cameraProvider;
14
17
  this.formProvider = formProvider;
18
+ this.provider = provider;
19
+ this.cd = cd;
20
+ this.zone = zone;
15
21
  this.action = new EventEmitter();
16
22
  }
17
23
  ngOnInit() {
24
+ console.time('fields');
18
25
  this.fields = this.formProvider.document();
26
+ console.timeEnd('fields');
27
+ this.__subs(this.data).subscribe((resp) => {
28
+ this.zone.run(() => {
29
+ switch (resp.type) {
30
+ case 'avatar':
31
+ this.model._avatar = resp.data;
32
+ this.form = new FormGroup({});
33
+ console.log(this.model);
34
+ break;
35
+ case 'model':
36
+ this.model = resp.data;
37
+ break;
38
+ }
39
+ console.timeEnd('results');
40
+ this.cd.detectChanges();
41
+ });
42
+ });
43
+ }
44
+ ngOnDestroy() {
45
+ this.__destroy();
19
46
  }
20
- ngOnDestroy() { }
21
47
  selfie() {
22
48
  this.action.emit({ selfie: true });
23
49
  }
24
50
  }
25
- ScanResultsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanResultsComponent, deps: [{ token: i1.NgxScandocCameraProvider }, { token: i2.ScanFieldsProvider }], target: i0.ɵɵFactoryTarget.Component });
26
- ScanResultsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScanResultsComponent, selector: "ngx-scan-results", inputs: { model: "model", images: "images", form: "form" }, outputs: { action: "action" }, ngImport: i0, template: "<div class=\"wraper\">\n <div style=\"flex: 1\">\n <mat-card style=\"margin: 4px; padding: 4px 16px\">\n <h3>{{ \"scandoc.result.avatar\" | translate }}</h3>\n <div class=\"selfieContainer\">\n <div class=\"selfie\">\n <img *ngIf=\"model?._avatar\" class=\"preview\" [src]=\"model._avatar\" />\n </div>\n <button (click)=\"selfie()\" mat-raised-button>\n {{ \"scandoc.result.takeSelfie\" | translate }}\n </button>\n </div>\n </mat-card>\n\n <form\n fxLayout=\"row\"\n fxLayoutAlign=\"start center\"\n class=\"px-16 py-0 w-100-p\"\n [formGroup]=\"form\"\n >\n <formly-form\n ngClass.lt-md=\"mobile\"\n fxFlex\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n >\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" class=\"pr-16 m-4\">\n <mat-card style=\"margin: 4px; padding-top: 2px\" class=\"images\">\n <h3>{{ \"scandoc.result.images\" | translate }}</h3>\n <ng-container *ngFor=\"let img of images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:8px 8px 0 0;overflow:auto;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i6.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"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
51
+ ScanResultsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanResultsComponent, deps: [{ token: i1.NgxScandocCameraProvider }, { token: i2.ScanFieldsProvider }, { token: i3.ScanProvider }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
52
+ ScanResultsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScanResultsComponent, selector: "ngx-scan-results", inputs: { data: "data", images: "images", form: "form" }, outputs: { action: "action" }, usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"model\" class=\"wraper\">\n <div style=\"flex: 1\">\n\n\n <form class=\"px-16 py-0 w-100-p\" [formGroup]=\"form\">\n <formly-form fxFlex [form]=\"form\" [fields]=\"fields\" [model]=\"model\">\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" class=\"pr-16 m-4\">\n <mat-card style=\"margin: 4px; padding: 16px\" class=\"images\">\n <div class=\"card-title\">{{ \"scandoc.result.images\" | translate }}</div>\n <ng-container *ngFor=\"let img of model.images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow-y:auto;overflow-x:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:4px;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i6.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i7.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
27
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScanResultsComponent, decorators: [{
28
54
  type: Component,
29
- args: [{ selector: 'ngx-scan-results', template: "<div class=\"wraper\">\n <div style=\"flex: 1\">\n <mat-card style=\"margin: 4px; padding: 4px 16px\">\n <h3>{{ \"scandoc.result.avatar\" | translate }}</h3>\n <div class=\"selfieContainer\">\n <div class=\"selfie\">\n <img *ngIf=\"model?._avatar\" class=\"preview\" [src]=\"model._avatar\" />\n </div>\n <button (click)=\"selfie()\" mat-raised-button>\n {{ \"scandoc.result.takeSelfie\" | translate }}\n </button>\n </div>\n </mat-card>\n\n <form\n fxLayout=\"row\"\n fxLayoutAlign=\"start center\"\n class=\"px-16 py-0 w-100-p\"\n [formGroup]=\"form\"\n >\n <formly-form\n ngClass.lt-md=\"mobile\"\n fxFlex\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n >\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" class=\"pr-16 m-4\">\n <mat-card style=\"margin: 4px; padding-top: 2px\" class=\"images\">\n <h3>{{ \"scandoc.result.images\" | translate }}</h3>\n <ng-container *ngFor=\"let img of images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:8px 8px 0 0;overflow:auto;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"] }]
30
- }], ctorParameters: function () { return [{ type: i1.NgxScandocCameraProvider }, { type: i2.ScanFieldsProvider }]; }, propDecorators: { model: [{
55
+ args: [{ selector: 'ngx-scan-results', template: "<div *ngIf=\"model\" class=\"wraper\">\n <div style=\"flex: 1\">\n\n\n <form class=\"px-16 py-0 w-100-p\" [formGroup]=\"form\">\n <formly-form fxFlex [form]=\"form\" [fields]=\"fields\" [model]=\"model\">\n </formly-form>\n </form>\n </div>\n <div style=\"flex: 1\" class=\"pr-16 m-4\">\n <mat-card style=\"margin: 4px; padding: 16px\" class=\"images\">\n <div class=\"card-title\">{{ \"scandoc.result.images\" | translate }}</div>\n <ng-container *ngFor=\"let img of model.images\">\n <div fxLayout=\"column\">\n <ng-container *ngIf=\"img.side === 0\">\n <div class=\"title\">\n {{ \"scandoc.result.frontSide\" | translate }}\n </div>\n </ng-container>\n <ng-container *ngIf=\"img.side === 1\">\n <div class=\"title\">{{ \"scandoc.result.backSide\" | translate }}</div>\n </ng-container>\n <img\n class=\"preview\"\n style=\"max-width: 460px; border-radius: 1rem\"\n [src]=\"img.data\"\n />\n </div>\n </ng-container>\n </mat-card>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1;overflow-y:auto;overflow-x:hidden}.images .title{padding:8px 0;font-weight:600}.images img{margin-bottom:16px;width:100%}.wraper{padding:4px;flex:1;display:flex;flex-direction:row}mat-card{box-shadow:none!important}.selfieContainer{display:flex;flex-direction:row;align-items:center}.selfieContainer .selfie{width:150px}.selfieContainer .selfie .preview{width:120px;height:120px;border-radius:80px}.selfieContainer .button{box-shadow:none;border:1px solid rgba(0,0,0,.1)}\n"] }]
56
+ }], ctorParameters: function () { return [{ type: i1.NgxScandocCameraProvider }, { type: i2.ScanFieldsProvider }, { type: i3.ScanProvider }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { data: [{
31
57
  type: Input
32
58
  }], images: [{
33
59
  type: Input
@@ -36,4 +62,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
36
62
  }], action: [{
37
63
  type: Output
38
64
  }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1yZXN1bHRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY2FuZG9jL3NyYy9jb3JlL2NvbXBvbmVudHMvc2Nhbi1yZXN1bHRzL3NjYW4tcmVzdWx0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3NjYW4tcmVzdWx0cy9zY2FuLXJlc3VsdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBTy9CLFlBQ1MsY0FBd0MsRUFDdkMsWUFBZ0M7UUFEakMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3ZDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUpoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUtuQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVyxLQUFVLENBQUM7SUFFdEIsTUFBTTtRQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7aUhBcEJVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLG1KQ3BCakMsaXJEQXFEQTsyRkRqQ2Esb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGtCQUFrQjtnSkFNbkIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvY2FtZXJhLnByb3ZpZGVyJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNjYW5GaWVsZHNQcm92aWRlciB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9zY2FuLmZvcm0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtc2Nhbi1yZXN1bHRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjYW4tcmVzdWx0cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NjYW4tcmVzdWx0cy5jb21wb25lbnQuc2NzcyddLFxuICAvLyAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjYW5SZXN1bHRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBpbWFnZXM6IGFueTtcbiAgZmllbGRzOiBhbnk7XG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNhbWVyYVByb3ZpZGVyOiBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBmb3JtUHJvdmlkZXI6IFNjYW5GaWVsZHNQcm92aWRlclxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZvcm1Qcm92aWRlci5kb2N1bWVudCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIHNlbGZpZSgpIHtcbiAgICB0aGlzLmFjdGlvbi5lbWl0KHsgc2VsZmllOiB0cnVlIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid3JhcGVyXCI+XG4gIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCI+XG4gICAgPG1hdC1jYXJkIHN0eWxlPVwibWFyZ2luOiA0cHg7IHBhZGRpbmc6IDRweCAxNnB4XCI+XG4gICAgICA8aDM+e3sgXCJzY2FuZG9jLnJlc3VsdC5hdmF0YXJcIiB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZmllQ29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxmaWVcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibW9kZWw/Ll9hdmF0YXJcIiBjbGFzcz1cInByZXZpZXdcIiBbc3JjXT1cIm1vZGVsLl9hdmF0YXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2VsZmllKClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICB7eyBcInNjYW5kb2MucmVzdWx0LnRha2VTZWxmaWVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8Zm9ybVxuICAgICAgZnhMYXlvdXQ9XCJyb3dcIlxuICAgICAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXG4gICAgICBjbGFzcz1cInB4LTE2IHB5LTAgdy0xMDAtcFwiXG4gICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgID5cbiAgICAgIDxmb3JtbHktZm9ybVxuICAgICAgICBuZ0NsYXNzLmx0LW1kPVwibW9iaWxlXCJcbiAgICAgICAgZnhGbGV4XG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICA+XG4gICAgICA8L2Zvcm1seS1mb3JtPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCIgY2xhc3M9XCJwci0xNiBtLTRcIj5cbiAgICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDRweDsgcGFkZGluZy10b3A6IDJweFwiIGNsYXNzPVwiaW1hZ2VzXCI+XG4gICAgICA8aDM+e3sgXCJzY2FuZG9jLnJlc3VsdC5pbWFnZXNcIiB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWcgb2YgaW1hZ2VzXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nLnNpZGUgPT09IDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyBcInNjYW5kb2MucmVzdWx0LmZyb250U2lkZVwiIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1nLnNpZGUgPT09IDFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7IFwic2NhbmRvYy5yZXN1bHQuYmFja1NpZGVcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzPVwicHJldmlld1wiXG4gICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogNDYwcHg7IGJvcmRlci1yYWRpdXM6IDFyZW1cIlxuICAgICAgICAgICAgW3NyY109XCJpbWcuZGF0YVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L21hdC1jYXJkPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi1yZXN1bHRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY2FuZG9jL3NyYy9jb3JlL2NvbXBvbmVudHMvc2Nhbi1yZXN1bHRzL3NjYW4tcmVzdWx0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3NjYW4tcmVzdWx0cy9zY2FuLXJlc3VsdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7O0FBU2xELE1BQU0sT0FBTyxvQkFDWCxTQUFRLGFBQWE7SUFXckIsWUFDUyxjQUF3QyxFQUN2QyxZQUFnQyxFQUNoQyxRQUFzQixFQUN0QixFQUFxQixFQUNyQixJQUFZO1FBRXBCLEtBQUssRUFBRSxDQUFDO1FBTkQsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBQ3ZDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3RCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVE7UUFQWixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVV0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2pCLEtBQUssUUFBUTt3QkFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUUvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDeEIsTUFBTTtvQkFDUixLQUFLLE9BQU87d0JBQ1YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUN2QixNQUFNO2lCQUNUO2dCQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRTNCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDOztpSEF0RFUsb0JBQW9CO3FHQUFwQixvQkFBb0Isd0tDekJqQyxxbkNBZ0NBOzJGRFBhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxrQkFBa0I7Z09BU25CLElBQUk7c0JBQVosS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBOZ1pvbmUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4U2NhbmRvY0NhbWVyYVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2NhbWVyYS5wcm92aWRlcic7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTY2FuRmllbGRzUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvc2Nhbi5mb3JtJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTY2FuUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvc2Nhbi5wcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1zY2FuLXJlc3VsdHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2Nhbi1yZXN1bHRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2Nhbi1yZXN1bHRzLmNvbXBvbmVudC5zY3NzJ10sXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY2FuUmVzdWx0c0NvbXBvbmVudFxuICBleHRlbmRzIEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBkYXRhITogU3ViamVjdDxhbnk+O1xuICBtb2RlbDogYW55O1xuICBASW5wdXQoKSBpbWFnZXM6IGFueTtcbiAgZmllbGRzOiBhbnk7XG5cbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY2FtZXJhUHJvdmlkZXI6IE5neFNjYW5kb2NDYW1lcmFQcm92aWRlcixcbiAgICBwcml2YXRlIGZvcm1Qcm92aWRlcjogU2NhbkZpZWxkc1Byb3ZpZGVyLFxuICAgIHByaXZhdGUgcHJvdmlkZXI6IFNjYW5Qcm92aWRlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS50aW1lKCdmaWVsZHMnKTtcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZm9ybVByb3ZpZGVyLmRvY3VtZW50KCk7XG4gICAgY29uc29sZS50aW1lRW5kKCdmaWVsZHMnKTtcblxuICAgIHRoaXMuX19zdWJzKHRoaXMuZGF0YSkuc3Vic2NyaWJlKChyZXNwKSA9PiB7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChyZXNwLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdhdmF0YXInOlxuICAgICAgICAgICAgdGhpcy5tb2RlbC5fYXZhdGFyID0gcmVzcC5kYXRhO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMubW9kZWwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW9kZWwnOlxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHJlc3AuZGF0YTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS50aW1lRW5kKCdyZXN1bHRzJyk7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX19kZXN0cm95KCk7XG4gIH1cblxuICBzZWxmaWUoKSB7XG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7IHNlbGZpZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm1vZGVsXCIgY2xhc3M9XCJ3cmFwZXJcIj5cbiAgPGRpdiBzdHlsZT1cImZsZXg6IDFcIj5cblxuXG4gICAgPGZvcm0gY2xhc3M9XCJweC0xNiBweS0wIHctMTAwLXBcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgIDxmb3JtbHktZm9ybSBmeEZsZXggW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZmllbGRzXCIgW21vZGVsXT1cIm1vZGVsXCI+XG4gICAgICA8L2Zvcm1seS1mb3JtPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCIgY2xhc3M9XCJwci0xNiBtLTRcIj5cbiAgICA8bWF0LWNhcmQgc3R5bGU9XCJtYXJnaW46IDRweDsgcGFkZGluZzogMTZweFwiIGNsYXNzPVwiaW1hZ2VzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7IFwic2NhbmRvYy5yZXN1bHQuaW1hZ2VzXCIgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltZyBvZiBtb2RlbC5pbWFnZXNcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWcuc2lkZSA9PT0gMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7IFwic2NhbmRvYy5yZXN1bHQuZnJvbnRTaWRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWcuc2lkZSA9PT0gMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgXCJzY2FuZG9jLnJlc3VsdC5iYWNrU2lkZVwiIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3M9XCJwcmV2aWV3XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiA0NjBweDsgYm9yZGVyLXJhZGl1czogMXJlbVwiXG4gICAgICAgICAgICBbc3JjXT1cImltZy5kYXRhXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbWF0LWNhcmQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -5,7 +5,7 @@ export class WebcamUtil {
5
5
  * Lists available videoInput devices
6
6
  * @returns a list of media device info.
7
7
  */
8
- static getAvailableVideoInputs() {
8
+ static getAvailableVideoInputs(facingMode = 'environment') {
9
9
  return new Observable((observer) => {
10
10
  if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
11
11
  return observer.error(null);
@@ -13,11 +13,13 @@ export class WebcamUtil {
13
13
  const _window = window;
14
14
  let streams;
15
15
  from(navigator.mediaDevices.getUserMedia({
16
- video: { deviceId: undefined },
16
+ video: { facingMode, deviceId: undefined },
17
17
  }))
18
- .pipe(tap((s) => { streams = s; }), switchMap((s) => from(navigator.mediaDevices.enumerateDevices())))
18
+ .pipe(tap((s) => {
19
+ streams = s;
20
+ }), switchMap((s) => from(navigator.mediaDevices.enumerateDevices())))
19
21
  .subscribe((devices) => {
20
- // console.log(streams);
22
+ // console.log(devices);
21
23
  if (streams) {
22
24
  streams.getTracks().forEach((track) => {
23
25
  track.stop();
@@ -45,4 +47,4 @@ export class WebcamUtil {
45
47
  // });
46
48
  }
47
49
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS91dGlsL3dlYmNhbS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFVBQVU7SUFDckI7OztPQUdHO0lBRUksTUFBTSxDQUFDLHVCQUF1QjtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2RSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7WUFDRCxNQUFNLE9BQU8sR0FBUSxNQUFNLENBQUM7WUFDakMsSUFBSSxPQUFZLENBQUM7WUFDWixJQUFJLENBQ0YsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7YUFDL0IsQ0FBQyxDQUNIO2lCQUNFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsRUFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDZCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQ2hELENBQ0Y7aUJBQ0EsU0FBUyxDQUFDLENBQUMsT0FBMEIsRUFBRSxFQUFFO2dCQUMxQyx5QkFBeUI7Z0JBRXZCLElBQUksT0FBTyxFQUFFO29CQUNYLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTt3QkFDekMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNmLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FDWixDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMxRCxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLDBDQUEwQztRQUMxQyx3QkFBd0I7UUFDeEIsUUFBUTtRQUNSLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsOENBQThDO1FBQzlDLGlCQUFpQjtRQUNqQiwwQkFBMEI7UUFDMUIsc0VBQXNFO1FBQ3RFLFlBQVk7UUFDWixXQUFXO1FBQ1gsU0FBUztRQUNULHdCQUF3QjtRQUN4QixvQ0FBb0M7UUFDcEMsVUFBVTtRQUNWLE1BQU07SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBXZWJjYW1VdGlsIHtcbiAgLyoqXG4gICAqIExpc3RzIGF2YWlsYWJsZSB2aWRlb0lucHV0IGRldmljZXNcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIG1lZGlhIGRldmljZSBpbmZvLlxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGdldEF2YWlsYWJsZVZpZGVvSW5wdXRzKCk6IE9ic2VydmFibGU8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcykge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IobnVsbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBfd2luZG93OiBhbnkgPSB3aW5kb3c7XG4gbGV0IHN0cmVhbXM6IGFueTtcbiAgICAgIGZyb20oXG4gICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgICB2aWRlbzogeyBkZXZpY2VJZDogdW5kZWZpbmVkIH0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocykgPT4ge3N0cmVhbXMgPSBzfSksXG4gICAgICAgICAgc3dpdGNoTWFwKChzKSA9PlxuICAgICAgICAgICAgZnJvbShuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKHN0cmVhbXMpO1xuXG4gICAgICAgICAgaWYgKHN0cmVhbXMpIHtcbiAgICAgICAgICAgIHN0cmVhbXMuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2s6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChcbiAgICAgICAgICAgIGRldmljZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZGV2aWNlOiBNZWRpYURldmljZUluZm8pID0+IGRldmljZS5raW5kID09PSAndmlkZW9pbnB1dCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgLy8gICAgIHZpZGVvOiB1bmRlZmluZWQsXG4gICAgLy8gICB9KTtcbiAgICAvLyAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAvLyAgICAgLmVudW1lcmF0ZURldmljZXMoKVxuICAgIC8vICAgICAudGhlbigoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAvLyAgICAgICByZXNvbHZlKFxuICAgIC8vICAgICAgICAgZGV2aWNlcy5maWx0ZXIoXG4gICAgLy8gICAgICAgICAgIChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgIC8vICAgICAgICAgKVxuICAgIC8vICAgICAgICk7XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgLy8gICAgICAgcmVqZWN0KGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH0pO1xuICB9XG59XG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS91dGlsL3dlYmNhbS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFVBQVU7SUFDckI7OztPQUdHO0lBRUksTUFBTSxDQUFDLHVCQUF1QixDQUNuQyxhQUFxQyxhQUFhO1FBRWxELE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3ZFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3QjtZQUNELE1BQU0sT0FBTyxHQUFRLE1BQU0sQ0FBQztZQUM1QixJQUFJLE9BQVksQ0FBQztZQUNqQixJQUFJLENBQ0YsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO2FBQzFDLENBQUMsQ0FDSDtpQkFDRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQ2xFO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRTtnQkFDdkMsd0JBQXdCO2dCQUV6QixJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7d0JBQ3pDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDZixDQUFDLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUNYLE9BQU8sQ0FBQyxNQUFNLENBQ1osQ0FBQyxNQUF1QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FDMUQsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QywwQ0FBMEM7UUFDMUMsd0JBQXdCO1FBQ3hCLFFBQVE7UUFDUiwyQkFBMkI7UUFDM0IsMEJBQTBCO1FBQzFCLDhDQUE4QztRQUM5QyxpQkFBaUI7UUFDakIsMEJBQTBCO1FBQzFCLHNFQUFzRTtRQUN0RSxZQUFZO1FBQ1osV0FBVztRQUNYLFNBQVM7UUFDVCx3QkFBd0I7UUFDeEIsb0NBQW9DO1FBQ3BDLFVBQVU7UUFDVixNQUFNO0lBQ1IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgV2ViY2FtVXRpbCB7XG4gIC8qKlxuICAgKiBMaXN0cyBhdmFpbGFibGUgdmlkZW9JbnB1dCBkZXZpY2VzXG4gICAqIEByZXR1cm5zIGEgbGlzdCBvZiBtZWRpYSBkZXZpY2UgaW5mby5cbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBnZXRBdmFpbGFibGVWaWRlb0lucHV0cyhcbiAgICBmYWNpbmdNb2RlOiAndXNlcicgfCAnZW52aXJvbm1lbnQnID0gJ2Vudmlyb25tZW50J1xuICApOiBPYnNlcnZhYmxlPE1lZGlhRGV2aWNlSW5mb1tdPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgaWYgKCFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzIHx8ICFuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVyLmVycm9yKG51bGwpO1xuICAgICAgfVxuICAgICAgY29uc3QgX3dpbmRvdzogYW55ID0gd2luZG93O1xuICAgICAgbGV0IHN0cmVhbXM6IGFueTtcbiAgICAgIGZyb20oXG4gICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgICB2aWRlbzogeyBmYWNpbmdNb2RlLGRldmljZUlkOiB1bmRlZmluZWQgfSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChzKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1zID0gcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKHMpID0+IGZyb20obmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5lbnVtZXJhdGVEZXZpY2VzKCkpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGRldmljZXM6IE1lZGlhRGV2aWNlSW5mb1tdKSA9PiB7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRldmljZXMpO1xuXG4gICAgICAgICAgaWYgKHN0cmVhbXMpIHtcbiAgICAgICAgICAgIHN0cmVhbXMuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2s6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChcbiAgICAgICAgICAgIGRldmljZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZGV2aWNlOiBNZWRpYURldmljZUluZm8pID0+IGRldmljZS5raW5kID09PSAndmlkZW9pbnB1dCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgLy8gICAgIHZpZGVvOiB1bmRlZmluZWQsXG4gICAgLy8gICB9KTtcbiAgICAvLyAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAvLyAgICAgLmVudW1lcmF0ZURldmljZXMoKVxuICAgIC8vICAgICAudGhlbigoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAvLyAgICAgICByZXNvbHZlKFxuICAgIC8vICAgICAgICAgZGV2aWNlcy5maWx0ZXIoXG4gICAgLy8gICAgICAgICAgIChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgIC8vICAgICAgICAgKVxuICAgIC8vICAgICAgICk7XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgLy8gICAgICAgcmVqZWN0KGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH0pO1xuICB9XG59XG4iXX0=