ets-fe-ng-sdk 17.0.310 → 17.0.311
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.
- package/esm2022/lib/Shared/components/file-upload/file-upload.component.mjs +3 -3
- package/esm2022/lib/Shared/components/webcam-media/webcam-media.component.mjs +9 -3
- package/fesm2022/ets-fe-ng-sdk.mjs +9 -4
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/utility.service.d.ts +1 -1
- package/lib/Shared/components/btn/btn.component.d.ts +1 -1
- package/lib/Shared/components/info-dialog/info-dialog.component.d.ts +1 -1
- package/lib/Shared/components/table-https/table-https.component.d.ts +1 -1
- package/lib/Shared/components/webcam-media/webcam-media.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -72,11 +72,11 @@ export class FileUploadComponent {
|
|
|
72
72
|
inp.click();
|
|
73
73
|
}
|
|
74
74
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
75
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", fileChange: "fileChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: i1.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["modalOpen", "modalClose"] }, { kind: "directive", type: i2.ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "widthChange"] }] }); }
|
|
75
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", fileChange: "fileChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: i1.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["modalOpen", "modalClose"] }, { kind: "directive", type: i2.ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "widthChange"] }] }); }
|
|
76
76
|
}
|
|
77
77
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FileUploadComponent, decorators: [{
|
|
78
78
|
type: Component,
|
|
79
|
-
args: [{ selector: 'app-file-upload', standalone: true, imports: [NgIf, NgClass, NgFor, BtnComponent, ModalComponents, MatMenuModule, WebcamMediaComponent], template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"] }]
|
|
79
|
+
args: [{ selector: 'app-file-upload', standalone: true, imports: [NgIf, NgClass, NgFor, BtnComponent, ModalComponents, MatMenuModule, WebcamMediaComponent], template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"] }]
|
|
80
80
|
}], ctorParameters: () => [], propDecorators: { help: [{
|
|
81
81
|
type: Input
|
|
82
82
|
}], label: [{
|
|
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
99
99
|
}], filesChange: [{
|
|
100
100
|
type: Output
|
|
101
101
|
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7OztBQVM5RSxNQUFNLE9BQU8sbUJBQW1CO0lBZ0I5QixJQUFxQixPQUFPLENBQUMsQ0FBUztRQUNwQyxRQUFRLENBQUMsRUFBRTtZQUNULEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDO2dCQUNyQyxNQUFNO1lBRVI7Z0JBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLE1BQU07U0FDVDtJQUNILENBQUM7SUFT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LGNBR2YsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFDLGVBQWUsRUFBQyxhQUFhLEVBQUMsb0JBQW9CLENBQUM7d0RBR3ZGLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBUUcsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHZSxPQUFPO3NCQUEzQixLQUFLO3VCQUFDLFFBQVE7Z0JBWU4sSUFBSTtzQkFBWixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QsIGlucHV0LCBtb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdDbGFzcywgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IE1vZGFsQ29tcG9uZW50cyBmcm9tICcuLi9tb2RhbC1jb21wb25lbnRzL21vZGFsLmNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgV2ViY2FtTWVkaWFDb21wb25lbnQgfSBmcm9tICcuLi93ZWJjYW0tbWVkaWEvd2ViY2FtLW1lZGlhLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maWxlLXVwbG9hZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBOZ0ZvciwgQnRuQ29tcG9uZW50LE1vZGFsQ29tcG9uZW50cyxNYXRNZW51TW9kdWxlLFdlYmNhbU1lZGlhQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGhlbHA6IHN0cmluZztcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgbWVkaWFXaWR0aCA9IG1vZGVsPG51bWJlcj4oMTA4MCk7IFxuICBjbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlV2ViY2FtID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKipcbiAgICogT25seSB1c2VmdWwgaWYgdXNpbmcgdGhlIHdlYmNhbSBvcHRpb25cbiAgICovXG4gIGZpbGVOYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbXVsdGlwbGU6IGJvb2xlYW47XG4gIG1pbmkgPSBpbnB1dCh0cnVlKTtcbiAgQElucHV0KCkgdXNlRG9jdW1lbnRNb2RhbDogYm9vbGVhbjtcbiAgbGlzdEZpbGVzID0gaW5wdXQodHJ1ZSk7XG4gIGFjY2VwdDogc3RyaW5nO1xuICBASW5wdXQoJ2FjY2VwdCcpIHNldCBfYWNjZXB0KHY6IHN0cmluZykge1xuICAgIHN3aXRjaCAodikge1xuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICB0aGlzLmFjY2VwdCA9ICcucG5nLC5qcGcsLmRvY3gsLnBkZic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmFjY2VwdCA9IHY7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvLyBAVmlld0NoaWxkKCd1cGxvYWRJbnB1dCcpIHVwbG9hZElucHV0UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBASW5wdXQoKSBmaWxlOiBGaWxlO1xuICBAT3V0cHV0KCkgZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcbiAgQElucHV0KCkgZmlsZXM6IEZpbGVbXTtcbiAgQE91dHB1dCgpIGZpbGVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlW10+KCk7XG5cbiAgcHVibGljIHVTID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIGdldCBpc1NpbmdsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubXVsdGlwbGU7XG4gIH1cbiAgcHJvdGVjdGVkIGFjY2VwdEZpbGVzKC4uLmZpbGVzOiBGaWxlW10pIHtcbiAgICB0aGlzLmZpbGVzID0gZmlsZXM7XG4gICAgdGhpcy5maWxlID0gZmlsZXMgPyBmaWxlc1swXSA6IG51bGw7XG4gICAgdGhpcy5lbWl0RmlsZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZW1pdEZpbGVzKCkge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB0aGlzLmZpbGVzQ2hhbmdlLmVtaXQodGhpcy5maWxlcyk7XG4gICAgZWxzZSB0aGlzLmZpbGVDaGFuZ2UuZW1pdCh0aGlzLmZpbGUpO1xuICB9XG5cbiAgb25VcGxvYWQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbTxGaWxlPihldmVudC50YXJnZXQuZmlsZXMpO1xuICAgIHRoaXMuYWNjZXB0RmlsZXMoLi4uZmlsZXMpO1xuICB9XG5cbiAgcmVtb3ZlRmlsZShpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5maWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuZmlsZSA9IHRoaXMuZmlsZXMgPyB0aGlzLmZpbGVzWzBdIDogbnVsbDtcblxuICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KHRoaXMuZmlsZSk7XG4gICAgdGhpcy5maWxlc0NoYW5nZS5lbWl0KHRoaXMuZmlsZXMpO1xuICB9XG4gIG9wZW5EaWFsb2coKSB7XG4gICAgY29uc3QgaW5wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnAudHlwZSA9ICdmaWxlJztcbiAgICBpbnAuYWNjZXB0ID0gdGhpcy5hY2NlcHQ7XG4gICAgaW5wLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICBpbnAub25jaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5vblVwbG9hZChlKTtcbiAgICAgIGlucC5yZW1vdmUoKTtcbiAgICB9O1xuICAgIC8vIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wKTtcbiAgICBpbnAuY2xpY2soKTtcbiAgfVxufVxuIiwiQGlmIChsaXN0RmlsZXMoKSkge1xuICA8ZGl2IFtuZ0NsYXNzXT1cInsgbWV0YTogbWluaSgpIH1cIiBjbGFzcz1cInt7IGNsYXNzKCkgfX0gZm9ybS1sYWJlbCBtYi0yIGhpZGUtc2Nyb2xsXCI+XG4gICAgQGZvciAoaXRlbSBvZiBmaWxlczsgdHJhY2sgaXRlbSkge1xuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1zdGFydCBtYi0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZS1zY3JvbGwgZmlsZS1uYW1lXCI+XG4gICAgICAgICAgICB7eyBpdGVtPy5uYW1lIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gdGV4dC1lbmRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHBvaW50ZXIgcC0xIGZhIGZhLWNsb3NlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoJGluZGV4KVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuPCEtLSA8aW5wdXQgdHlwZT1cImZpbGVcIiAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGFjY2VwdD1cInt7YWNjZXB0fX1cIiAoY2hhbmdlKT1cIm9uVXBsb2FkKCRldmVudClcIiAjdXBsb2FkSW5wdXQgW211bHRpcGxlXT1cIm11bHRpcGxlXCI+IC0tPlxuPGFwcC1idG5cbiAgaWNvbj1cInVwbG9hZFwiXG4gIChtY2xpY2spPVwidXNlV2ViY2FtKCkgPyBudWxsIDogb3BlbkRpYWxvZygpXCJcbiAgW3R5cGVdPVwiZmlsZSA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW2hlbHBdPVwiaGVscFwiXG4gIFt0ZXh0XT1cImxhYmVsXCJcbiAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInVzZVdlYmNhbSgpID8gbWVudSA6IG51bGxcIiAvPlxuXG48bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib3BlbkRpYWxvZygpXCI+VXBsb2FkPC9idXR0b24+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwid2ViY2FtTW9kYWwub3BlbigpXCI+VXNlIENhbWVyYTwvYnV0dG9uPlxuPC9tYXQtbWVudT5cblxuPG1vZGFsLWNvbXAgI3dlYmNhbU1vZGFsIHdpZHRoPVwiMTA4MHB4XCIgW3Nob3dGb290ZXJdPVwiZmFsc2VcIiBoZWFkZXI9XCJXZWJjYW1cIj5cbiAgPG5nLXRlbXBsYXRlIG1vZGFsQm9keT5cbiAgICA8bGliLXdlYmNhbS1tZWRpYSBbZmlsZU5hbWVdPVwiZmlsZU5hbWUoKVwiIFt3aWR0aF09XCJtZWRpYVdpZHRoKClcIiAoY2xvc2VkKT1cIndlYmNhbU1vZGFsLmNsb3NlKCk7IGFjY2VwdEZpbGVzKCRldmVudClcIiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9tb2RhbC1jb21wPlxuIl19
|
|
@@ -3,6 +3,7 @@ import { Component, EventEmitter, Output, computed, input, model, signal, viewCh
|
|
|
3
3
|
import { BtnComponent } from '../btn/btn.component';
|
|
4
4
|
import { filter, map, Observable, tap, timer } from 'rxjs';
|
|
5
5
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { LoaderComponent } from '../loader/loader.component';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@angular/common";
|
|
8
9
|
export class WebcamMediaComponent {
|
|
@@ -61,6 +62,7 @@ export class WebcamMediaComponent {
|
|
|
61
62
|
this.isRecording = toSignal(this.recordingState.pipe(map((r) => r == 'recording' || r == 'paused')));
|
|
62
63
|
this.recordedBlobs = [];
|
|
63
64
|
this.recordedTime = signal(0);
|
|
65
|
+
this.loading = signal(false);
|
|
64
66
|
this.startRecording = (stream = this.stream()) => {
|
|
65
67
|
if (!this.isVideo())
|
|
66
68
|
return;
|
|
@@ -120,16 +122,20 @@ export class WebcamMediaComponent {
|
|
|
120
122
|
}
|
|
121
123
|
ngOnDestroy() {
|
|
122
124
|
this.sub?.unsubscribe();
|
|
125
|
+
this.closeWebcam();
|
|
123
126
|
}
|
|
124
127
|
/**
|
|
125
128
|
* Start the webcam stream
|
|
126
129
|
*/
|
|
127
130
|
startUpWebcam() {
|
|
131
|
+
this.loading.set(true);
|
|
128
132
|
this.clear();
|
|
129
133
|
navigator.mediaDevices
|
|
130
134
|
.getUserMedia({ video: true, audio: this.useAudio() })
|
|
131
135
|
.then((stream) => {
|
|
132
136
|
this.streaming.set(true);
|
|
137
|
+
this.loading.set(false);
|
|
138
|
+
// stream.onaddtrack = () => this.loading.set(false);
|
|
133
139
|
this.canvas.set(document.createElement('canvas'));
|
|
134
140
|
this.canvas()?.setAttribute('width', this.width() + 'px');
|
|
135
141
|
this.canvas()?.setAttribute('height', this.height() + 'px');
|
|
@@ -245,11 +251,11 @@ export class WebcamMediaComponent {
|
|
|
245
251
|
this.recorder.pause();
|
|
246
252
|
}
|
|
247
253
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: WebcamMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
248
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: WebcamMediaComponent, isStandalone: true, selector: "lib-webcam-media", inputs: { isVideo: { classPropertyName: "isVideo", publicName: "isVideo", isSignal: true, isRequired: false, transformFunction: null }, useAudio: { classPropertyName: "useAudio", publicName: "useAudio", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, fileNameFactory: { classPropertyName: "fileNameFactory", publicName: "fileNameFactory", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: "fileType", publicName: "fileType", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, recordingNotificationInterval: { classPropertyName: "recordingNotificationInterval", publicName: "recordingNotificationInterval", isSignal: true, isRequired: false, transformFunction: null }, isBackground: { classPropertyName: "isBackground", publicName: "isBackground", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", recorderStopped: "recorderStopped", recorderErrored: "recorderErrored", recorderStarted: "recorderStarted", recordingState: "recordingState", recordingChanged: "recordingChanged", width: "widthChange" }, viewQueries: [{ propertyName: "streamingVideoTemplate", first: true, predicate: ["streamVideoTemp"], descendants: true, isSignal: true }, { propertyName: "recordingVideoRef", first: true, predicate: ["recordingVideoTag"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n
|
|
254
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: WebcamMediaComponent, isStandalone: true, selector: "lib-webcam-media", inputs: { isVideo: { classPropertyName: "isVideo", publicName: "isVideo", isSignal: true, isRequired: false, transformFunction: null }, useAudio: { classPropertyName: "useAudio", publicName: "useAudio", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, fileNameFactory: { classPropertyName: "fileNameFactory", publicName: "fileNameFactory", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: "fileType", publicName: "fileType", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, recordingNotificationInterval: { classPropertyName: "recordingNotificationInterval", publicName: "recordingNotificationInterval", isSignal: true, isRequired: false, transformFunction: null }, isBackground: { classPropertyName: "isBackground", publicName: "isBackground", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", recorderStopped: "recorderStopped", recorderErrored: "recorderErrored", recorderStarted: "recorderStarted", recordingState: "recordingState", recordingChanged: "recordingChanged", width: "widthChange" }, viewQueries: [{ propertyName: "streamingVideoTemplate", first: true, predicate: ["streamVideoTemp"], descendants: true, isSignal: true }, { propertyName: "recordingVideoRef", first: true, predicate: ["recordingVideoTag"], descendants: true, isSignal: true }], ngImport: i0, template: "<loader [loading]=\"loading()\">\n <div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n <ng-container *ngTemplateOutlet=\"streamVideoTemp\" />\n\n @if (!isBackground()) {\n <div class=\"wm-buttons\">\n <div class=\"row row-cols-lg-auto g-3 justify-content-start\">\n @if (!isRecording()) {\n <div>\n <app-btn [text]=\"isPicture() ? 'Take Picture' : 'Record Video'\" (mclick)=\"isPicture() ? takePicture() : startRecording()\" />\n </div>\n } @else {\n <div>\n <app-btn\n text=\"{{ isPaused() ? 'Play' : 'Pause' }} Recording\"\n (mclick)=\"pauseRecording()\"\n type=\"outline\"\n [icon]=\"isPaused() ? 'play' : 'pause'\" />\n </div>\n <div>\n <app-btn [text]=\"'Stop Recording'\" (mclick)=\"stopRecording()\" type=\"danger\" icon=\"stop\" />\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template #streamVideoTemp>\n <div class=\"wm-recording-video-cont\">\n <video #recordingVideoTag [srcObject]=\"stream()\" autoplay class=\"wm-recording-video {{ extraClass() }}\"></video>\n @if (isRecording()) {\n <div class=\"wm-recordingDot\"></div>\n }\n </div>\n </ng-template>\n\n @if (computedPreview()) {\n <div class=\"wm-preview\">\n <div>\n @if (isPicture()) {\n <img class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"photoSrc()\" />\n } @else {\n <video class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"mediaFile()\"></video>\n }\n </div>\n <div class=\"mt-3 row row-cols-lg-auto g-3\">\n <div>\n <app-btn text=\"Retake {{ subject() }}\" type=\"outline\" (mclick)=\"clear()\" />\n </div>\n <div>\n <app-btn (mclick)=\"save()\" text=\"Done\" type=\"primary\" icon=\"save\" />\n </div>\n <div>\n <app-btn (mclick)=\"cancel()\" text=\"Cancel\" type=\"danger\" icon=\"cancel\" />\n </div>\n </div>\n </div>\n }\n</loader>\n", styles: [":host{display:block}:host .wm-recording-video{width:100%}:host .wm-preview image,:host .wm-preview video{object-fit:contain}:host .wm-recording-video-cont{position:relative}@keyframes wmAnimateDot{0%{background-color:transparent}50%{background-color:#ff000086}}:host .wm-recordingDot{animation-name:wmAnimateDot;animation-duration:1s;animation-iteration-count:infinite;border-radius:5px;--dimen: 20px;width:var(--dimen);height:var(--dimen);position:absolute;top:10px;right:10px}:host .wm-buttons{margin-top:var(--space-16)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height"] }] }); }
|
|
249
255
|
}
|
|
250
256
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: WebcamMediaComponent, decorators: [{
|
|
251
257
|
type: Component,
|
|
252
|
-
args: [{ selector: 'lib-webcam-media', standalone: true, imports: [CommonModule, BtnComponent], template: "<div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n
|
|
258
|
+
args: [{ selector: 'lib-webcam-media', standalone: true, imports: [CommonModule, BtnComponent, LoaderComponent], template: "<loader [loading]=\"loading()\">\n <div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n <ng-container *ngTemplateOutlet=\"streamVideoTemp\" />\n\n @if (!isBackground()) {\n <div class=\"wm-buttons\">\n <div class=\"row row-cols-lg-auto g-3 justify-content-start\">\n @if (!isRecording()) {\n <div>\n <app-btn [text]=\"isPicture() ? 'Take Picture' : 'Record Video'\" (mclick)=\"isPicture() ? takePicture() : startRecording()\" />\n </div>\n } @else {\n <div>\n <app-btn\n text=\"{{ isPaused() ? 'Play' : 'Pause' }} Recording\"\n (mclick)=\"pauseRecording()\"\n type=\"outline\"\n [icon]=\"isPaused() ? 'play' : 'pause'\" />\n </div>\n <div>\n <app-btn [text]=\"'Stop Recording'\" (mclick)=\"stopRecording()\" type=\"danger\" icon=\"stop\" />\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template #streamVideoTemp>\n <div class=\"wm-recording-video-cont\">\n <video #recordingVideoTag [srcObject]=\"stream()\" autoplay class=\"wm-recording-video {{ extraClass() }}\"></video>\n @if (isRecording()) {\n <div class=\"wm-recordingDot\"></div>\n }\n </div>\n </ng-template>\n\n @if (computedPreview()) {\n <div class=\"wm-preview\">\n <div>\n @if (isPicture()) {\n <img class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"photoSrc()\" />\n } @else {\n <video class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"mediaFile()\"></video>\n }\n </div>\n <div class=\"mt-3 row row-cols-lg-auto g-3\">\n <div>\n <app-btn text=\"Retake {{ subject() }}\" type=\"outline\" (mclick)=\"clear()\" />\n </div>\n <div>\n <app-btn (mclick)=\"save()\" text=\"Done\" type=\"primary\" icon=\"save\" />\n </div>\n <div>\n <app-btn (mclick)=\"cancel()\" text=\"Cancel\" type=\"danger\" icon=\"cancel\" />\n </div>\n </div>\n </div>\n }\n</loader>\n", styles: [":host{display:block}:host .wm-recording-video{width:100%}:host .wm-preview image,:host .wm-preview video{object-fit:contain}:host .wm-recording-video-cont{position:relative}@keyframes wmAnimateDot{0%{background-color:transparent}50%{background-color:#ff000086}}:host .wm-recordingDot{animation-name:wmAnimateDot;animation-duration:1s;animation-iteration-count:infinite;border-radius:5px;--dimen: 20px;width:var(--dimen);height:var(--dimen);position:absolute;top:10px;right:10px}:host .wm-buttons{margin-top:var(--space-16)}\n"] }]
|
|
253
259
|
}], propDecorators: { closed: [{
|
|
254
260
|
type: Output
|
|
255
261
|
}], recorderStopped: [{
|
|
@@ -263,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
|
|
|
263
269
|
}], recordingChanged: [{
|
|
264
270
|
type: Output
|
|
265
271
|
}] } });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLW1lZGlhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy93ZWJjYW0tbWVkaWEvd2ViY2FtLW1lZGlhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy93ZWJjYW0tbWVkaWEvd2ViY2FtLW1lZGlhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUEwQixNQUFNLEVBQXVCLEdBQUcsRUFBRSxVQUFVLEVBQW9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFTdEQsTUFBTSxPQUFPLG9CQUFvQjtJQVBqQztRQVFZLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUM1QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDcEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7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QkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzs4QkFLM0IsTUFBTTtzQkFBZixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgY29tcHV0ZWQsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVib3VuY2UsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmcm9tRXZlbnQsIGludGVydmFsLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItd2ViY2FtLW1lZGlhJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQnRuQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3dlYmNhbS1tZWRpYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi93ZWJjYW0tbWVkaWEuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBXZWJjYW1NZWRpYUNvbXBvbmVudCB7XG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRlclN0b3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVjb3JkZXJFcnJvcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlY29yZGVyU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRpbmdTdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkaW5nU3RhdGU+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRpbmdDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlIHwgdW5kZWZpbmVkPigpO1xuXG4gIGlzVmlkZW8gPSBpbnB1dDxib29sZWFuPigpO1xuICB1c2VBdWRpbyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGZpbGVOYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuICBmaWxlTmFtZUZhY3RvcnkgPSBpbnB1dDwoY29tcDogV2ViY2FtTWVkaWFDb21wb25lbnQpID0+IHN0cmluZz4oKTtcbiAgZmlsZVR5cGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGV4dHJhQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIC8qKlxuICAgKiBTZWNvbmRzXG4gICAqL1xuICByZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCA9IGlucHV0PG51bWJlcj4oNSk7XG4gIGlzQmFja2dyb3VuZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb21wdXRlZFJlY29yZGluZ05vdGlmaWNhdGlvbkludGVydmFsID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiAodGhpcy5yZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCgpIHx8IDUpICogMTAwMCk7XG4gIGlzUGljdHVyZSA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLmlzVmlkZW8oKSk7XG5cbiAgc3ViamVjdCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzUGljdHVyZSgpID8gJ0ltYWdlJyA6ICdWaWRlbycpKTtcblxuICBpc1BhdXNlZCA9IHRvU2lnbmFsKHRoaXMucmVjb3JkaW5nU3RhdGUucGlwZShtYXAoKHIpID0+IHIgPT0gJ3BhdXNlZCcpKSk7XG5cbiAgY29tcHV0ZWRGaWxlVHlwZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBmdCA9IHRoaXMuZmlsZVR5cGUoKSxcbiAgICAgIGlzcCA9IHRoaXMuaXNQaWN0dXJlKCk7XG4gICAgcmV0dXJuIGZ0IHx8IChpc3AgPyAnaW1hZ2UvanBlZycgOiAndmlkZW8vbXA0Jyk7XG4gIH0pO1xuICBjb21wdXRlZEZpbGVFeHRlbnNpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXB1dGVkRmlsZVR5cGUoKT8uc3BsaXQoJy8nKVsxXSk7XG4gIGNvbXB1dGVkRmlsZU5hbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZmYgPSB0aGlzLmZpbGVOYW1lRmFjdG9yeSgpLFxuICAgICAgZm4gPSB0aGlzLmZpbGVOYW1lKCkgfHwgZmY/Lih0aGlzKSxcbiAgICAgIGZ4ID0gdGhpcy5jb21wdXRlZEZpbGVFeHRlbnNpb24oKSxcbiAgICAgIHN1YmplY3QgPSB0aGlzLnN1YmplY3QoKTtcbiAgICByZXR1cm4gZm4/LmluY2x1ZGVzKCcuJyArIGZ4KSA/IGZuIDogYCR7Zm4gfHwgc3ViamVjdH0uJHtmeH1gO1xuICB9KTtcblxuICBzdHJlYW1pbmdWaWRlb1RlbXBsYXRlID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPGFueT4+KCdzdHJlYW1WaWRlb1RlbXAnKTtcbiAgcmVjb3JkaW5nVmlkZW9SZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZjxIVE1MVmlkZW9FbGVtZW50Pj4oJ3JlY29yZGluZ1ZpZGVvVGFnJyk7XG4gIHJlY29yZGluZ1ZpZGVvUmVmRWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlY29yZGluZ1ZpZGVvUmVmKCk/Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gIHN0cmVhbWluZyA9IHNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcmV2aWV3ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29tcHV0ZWRQcmV2aWV3ID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gIXRoaXMuaXNCYWNrZ3JvdW5kKCkgJiYgdGhpcy5wcmV2aWV3KCkpO1xuXG4gIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBjYXB0dXJlZCBwaG90by4gV2Ugd2lsbCBzZXQgdGhlXG4gIC8vIHdpZHRoIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGhlcmUsIGJ1dCB0aGUgaGVpZ2h0IHdpbGwgYmVcbiAgLy8gY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBpbnB1dCBzdHJlYW0uXG5cbiAgd2lkdGggPSBtb2RlbDxudW1iZXI+KDEwODApOyAvLyBXZSB3aWxsIHNjYWxlIHRoZSBwaG90byB3aWR0aCB0byB0aGlzXG4gIGhlaWdodCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCgpO1xuICAgIHJldHVybiB3aWR0aCAvICg0IC8gMyk7XG4gIH0pOyAvLyBUaGlzIHdpbGwgYmUgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGlucHV0IHN0cmVhbVxuXG4gIC8vIFRoZSB2YXJpb3VzIEhUTUwgZWxlbWVudHMgd2UgbmVlZCB0byBjb25maWd1cmUgb3IgY29udHJvbC4gVGhlc2VcbiAgLy8gd2lsbCBiZSBzZXQgYnkgdGhlIHN0YXJ0dXAoKSBmdW5jdGlvbi5cblxuICBwcm90ZWN0ZWQgY2FudmFzID0gc2lnbmFsPEhUTUxDYW52YXNFbGVtZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBtZWRpYUZpbGUgPSBzaWduYWw8RmlsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcGhvdG9TcmMgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICB2aWRlb1NyYyA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgc3RyZWFtID0gc2lnbmFsPE1lZGlhU3RyZWFtPih1bmRlZmluZWQpO1xuXG4gIHN1YjogU3Vic2NyaXB0aW9uO1xuICByZWNvcmRlcjogTWVkaWFSZWNvcmRlcjtcbiAgaXNSZWNvcmRpbmcgPSB0b1NpZ25hbDxib29sZWFuPih0aGlzLnJlY29yZGluZ1N0YXRlLnBpcGUobWFwKChyKSA9PiByID09ICdyZWNvcmRpbmcnIHx8IHIgPT0gJ3BhdXNlZCcpKSk7XG4gIHJlY29yZGVkQmxvYnM6IEJsb2JbXSA9IFtdO1xuXG4gIHJlY29yZGVkVGltZSA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0VXBXZWJjYW0oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB3ZWJjYW0gc3RyZWFtXG4gICAqL1xuICBzdGFydFVwV2ViY2FtKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzXG4gICAgICAuZ2V0VXNlck1lZGlhKHsgdmlkZW86IHRydWUsIGF1ZGlvOiB0aGlzLnVzZUF1ZGlvKCkgfSlcbiAgICAgIC50aGVuKChzdHJlYW0pID0+IHtcbiAgICAgICAgdGhpcy5zdHJlYW1pbmcuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNhbnZhcy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykpO1xuICAgICAgICB0aGlzLmNhbnZhcygpPy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdGhpcy53aWR0aCgpICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMuY2FudmFzKCk/LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQoKSArICdweCcpO1xuICAgICAgICB0aGlzLnN0cmVhbS5zZXQoc3RyZWFtKTtcbiAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQ6YCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlIHRoYXQgdGhlIHVzZXIgaXMgZG9uZSB3aXRoIHRoZSB3ZWJjYW0gY29tcG9uZW50LlxuICAgKlxuICAgKiBBbnkgbWVkaWEgb2J0YWluZWQgd2lsbCBiZSBlbWl0dGVkXG4gICAqL1xuICBzYXZlKCkge1xuICAgIGlmICh0aGlzLmlzUGljdHVyZSgpKVxuICAgICAgbmV3IE9ic2VydmFibGU8RmlsZT4oKHN1YikgPT5cbiAgICAgICAgdGhpcy5jYW52YXMoKSEudG9CbG9iKFxuICAgICAgICAgIChibG9iKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvYikge1xuICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsZS5zZXQobmV3IEZpbGUoW2Jsb2JdLCB0aGlzLmNvbXB1dGVkRmlsZU5hbWUoKSkpO1xuICAgICAgICAgICAgICBzdWIubmV4dCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Ugc3ViLmVycm9yKGBObyAke3RoaXMuc3ViamVjdCgpfSBmaWxlIGdlbmVyYXRlZGApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5jb21wdXRlZEZpbGVUeXBlKCksXG4gICAgICAgICAgMSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgICAgdGhpcy5jbG9zZVdlYmNhbSgpO1xuICAgICAgfSk7XG4gICAgZWxzZSB7IFxuICAgICAgdGhpcy5jbG9zZWQuZW1pdCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgIHRoaXMuY2xvc2VXZWJjYW0oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGUgdGhhdCB0aGUgdXNlciBpcyBkb25lIHdpdGggdGhlIHdlYmNhbSBjb21wb25lbnQuXG4gICAqXG4gICAqIEFueSBtZWRpYSBvYnRhaW5lZCB3aWxsIGJlIGRlbGV0ZWRcbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VXZWJjYW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbWVkaWEgdGFrZW4gYW5kIGNsb3NlIHByZXZpZXdcbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmNhbnZhcygpKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jYW52YXMoKT8uZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGNvbnRleHQhLmZpbGxTdHlsZSA9ICcjQUFBJztcbiAgICAgIGNvbnRleHQhLmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzKCkhLndpZHRoLCB0aGlzLmNhbnZhcygpIS5oZWlnaHQpO1xuXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXMoKSEudG9EYXRhVVJMKHRoaXMuY29tcHV0ZWRGaWxlVHlwZSgpKTtcbiAgICAgIHRoaXMucGhvdG9TcmMuc2V0KGRhdGEpO1xuICAgICAgdGhpcy5zdHJlYW1pbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5wcmV2aWV3LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNodXRkb3duIHRoZSB3ZWJjYW0gc3RyZWFtXG4gICAqL1xuICBjbG9zZVdlYmNhbSgpIHtcbiAgICB0aGlzLnN0cmVhbSgpXG4gICAgICA/LmdldFRyYWNrcygpXG4gICAgICAuZm9yRWFjaCgoeCkgPT4geC5zdG9wKCkpO1xuICAgIHRoaXMuc3RyZWFtLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuc3RyZWFtaW5nLnNldCh1bmRlZmluZWQpO1xuICAgIC8vIHRoaXMuc3RyZWFtLnNldCh0aGlzLnN0cmVhbSgpPy5nZXRUcmFja3NbMF0uc3RvcCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgcGhvdG8gYnkgZmV0Y2hpbmcgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHZpZGVvXG4gICAqIGFuZCBkcmF3aW5nIGl0IGludG8gYSBjYW52YXMsIHRoZW4gY29udmVydGluZyB0aGF0IHRvIGEgUE5HXG4gICAqIGZvcm1hdCBkYXRhIFVSTC5cbiAgICpcbiAgICogQnkgZHJhd2luZyBpdCBvbiBhbiBvZmZzY3JlZW4gY2FudmFzIGFuZCB0aGVuXG4gICAqIGRyYXdpbmcgdGhhdCB0byB0aGUgc2NyZWVuLCB3ZSBjYW4gY2hhbmdlIGl0cyBzaXplIGFuZC9vciBhcHBseVxuICAgKiBvdGhlciBjaGFuZ2VzIGJlZm9yZSBkcmF3aW5nIGl0LlxuICAgKi9cbiAgdGFrZVBpY3R1cmUoKSB7XG4gICAgaWYgKCF0aGlzLmlzUGljdHVyZSgpKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY2FudmFzKCkhLmdldENvbnRleHQoJzJkJyksXG4gICAgICB3aWR0aCA9IHRoaXMud2lkdGgoKSxcbiAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0KCk7XG4gICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiBjb250ZXh0KSB7XG4gICAgICB0aGlzLmNhbnZhcy51cGRhdGUoKGNhbnZhcykgPT4ge1xuICAgICAgICBpZiAoY2FudmFzKSBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYW52YXMudXBkYXRlKChjYW52YXMpID0+IHtcbiAgICAgICAgaWYgKGNhbnZhcykgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICAgIH0pO1xuICAgICAgY29udGV4dC5kcmF3SW1hZ2UodGhpcy5yZWNvcmRpbmdWaWRlb1JlZkVsKCkhLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzKCkhLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgICB0aGlzLnBob3RvU3JjLnNldChkYXRhKTtcbiAgICB9IGVsc2UgdGhpcy5jbGVhcigpO1xuXG4gICAgdGhpcy5zdHJlYW1pbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnByZXZpZXcuc2V0KHRydWUpO1xuICB9XG5cbiAgc3RhcnRSZWNvcmRpbmcgPSAoc3RyZWFtID0gdGhpcy5zdHJlYW0oKSkgPT4ge1xuICAgIGlmICghdGhpcy5pc1ZpZGVvKCkpIHJldHVybjtcbiAgICB0aGlzLnJlY29yZGVyID0gbmV3IE1lZGlhUmVjb3JkZXIoc3RyZWFtKTtcblxuICAgIHRoaXMucmVjb3JkZWRCbG9icyA9IFtdO1xuICAgIHRoaXMucmVjb3JkZWRUaW1lLnNldCgwKTtcbiAgICBjb25zdCBsZW5ndGhzOiBbbnVtYmVyLCBudW1iZXJdW10gPSBbXTtcbiAgICB0aGlzLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChldmVudCkgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRlZEJsb2JzLnB1c2goZXZlbnQuZGF0YSk7XG4gICAgICB0aGlzLm1lZGlhRmlsZS5zZXQobmV3IEZpbGUodGhpcy5yZWNvcmRlZEJsb2JzLCB0aGlzLmNvbXB1dGVkRmlsZU5hbWUoKSwgeyB0eXBlOiB0aGlzLmNvbXB1dGVkRmlsZVR5cGUoKSB9KSk7XG4gICAgICBsZW5ndGhzLnB1c2goW3RoaXMubWVkaWFGaWxlKCkuc2l6ZSwgZXZlbnQuZGF0YS5zaXplXSk7XG4gICAgfTtcbiAgICAvLyB0aGlzLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChldmVudCkgPT4ge1xuICAgIC8vICAgdGhpcy5yZWNvcmRlZEJsb2JzID0gW2V2ZW50LmRhdGFdO1xuICAgIC8vICAgbGVuZ3Rocy5wdXNoKGV2ZW50LmRhdGEuc2l6ZSk7XG4gICAgLy8gfTtcbiAgICAvLyB0aGlzLnJlY29yZGVyLm9uZGF0YWF2YWlsYWJsZSA9IChldmVudCkgPT4gdGhpcy5yZWNvcmRlZEJsb2JzLnB1c2goZXZlbnQuZGF0YSk7XG5cbiAgICB0aGlzLnJlY29yZGVyLnN0YXJ0KCk7XG4gICAgbGV0IG5vdGlmU3ViOiBTdWJzY3JpcHRpb247XG4gICAgY29uc3Qgc3RhcnRUaW1lciA9ICgpID0+IHtcbiAgICAgIGxldCBsYXN0RGF0ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgbm90aWZTdWIgPSB0aW1lcigxMDAwLCAxMDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZWNvcmRlZFRpbWUudXBkYXRlKCh0KSA9PiAodCArPSAxKSkpLFxuICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLmxvZyhEYXRlLm5vdygpLCB0aGlzLmNvbXB1dGVkUmVjb3JkaW5nTm90aWZpY2F0aW9uSW50ZXJ2YWwoKSwgdGhpcy5yZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCgpKSksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IERhdGUubm93KCkgLSBsYXN0RGF0ZVRpbWUgPiB0aGlzLmNvbXB1dGVkUmVjb3JkaW5nTm90aWZpY2F0aW9uSW50ZXJ2YWwoKSksXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMucmVjb3JkZXIucmVxdWVzdERhdGEoKSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAgIGxhc3REYXRlVGltZSA9IERhdGUubm93KCk7IFxuICAgICAgICAgIHRoaXMucmVjb3JkaW5nQ2hhbmdlZC5lbWl0KHRoaXMubWVkaWFGaWxlKCkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMucmVjb3JkZXIub25zdGFydCA9IChlKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZGluZ1N0YXRlLmVtaXQodGhpcy5yZWNvcmRlci5zdGF0ZSk7XG4gICAgICB0aGlzLnJlY29yZGVyU3RhcnRlZC5lbWl0KGUpO1xuICAgICAgc3RhcnRUaW1lcigpO1xuICAgIH07XG4gICAgdGhpcy5yZWNvcmRlci5vbnN0b3AgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRpbmdTdGF0ZS5lbWl0KHRoaXMucmVjb3JkZXIuc3RhdGUpO1xuICAgICAgdGhpcy5yZWNvcmRlclN0b3BwZWQuZW1pdChlKTtcbiAgICAgIGNvbnNvbGUubG9nKCduZXcgbGVuZ3RoJywgbGVuZ3Rocyk7XG4gICAgICBub3RpZlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHRoaXMucmVjb3JkZXIub25wYXVzZSA9IChlKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZGluZ1N0YXRlLmVtaXQodGhpcy5yZWNvcmRlci5zdGF0ZSk7XG4gICAgICBub3RpZlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHRoaXMucmVjb3JkZXIub25yZXN1bWUgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRpbmdTdGF0ZS5lbWl0KHRoaXMucmVjb3JkZXIuc3RhdGUpO1xuICAgICAgc3RhcnRUaW1lcigpO1xuICAgIH07XG4gICAgdGhpcy5yZWNvcmRlci5vbmVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMucmVjb3JkaW5nU3RhdGUuZW1pdCh0aGlzLnJlY29yZGVyLnN0YXRlKTtcbiAgICAgIHRoaXMucmVjb3JkZXJFcnJvcmVkLmVtaXQoZSk7XG4gICAgICBub3RpZlN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICB9O1xuXG4gIHN0b3BSZWNvcmRpbmcoKSB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXIuc3RhdGUgPT09ICdyZWNvcmRpbmcnKSB0aGlzLnJlY29yZGVyLnN0b3AoKTtcblxuICAgIHRoaXMucHJldmlldy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5zdHJlYW1pbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHBhdXNlUmVjb3JkaW5nKCkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLnJlY29yZGVyLnN0YXRlID09PSAncGF1c2VkJykgdGhpcy5yZWNvcmRlci5yZXN1bWUoKTtcbiAgICBlbHNlIHRoaXMucmVjb3JkZXIucGF1c2UoKTtcbiAgfVxuIFxufVxuIiwiPGRpdiBjbGFzcz1cIlwiIFtoaWRkZW5dPVwic3RyZWFtaW5nKCkgIT0gdHJ1ZSB8fCBpc0JhY2tncm91bmQoKVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RyZWFtVmlkZW9UZW1wXCIgLz5cblxuICBAaWYgKCFpc0JhY2tncm91bmQoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJ3bS1idXR0b25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiICByb3cgcm93LWNvbHMtbGctYXV0byBnLTMganVzdGlmeS1jb250ZW50LXN0YXJ0XCI+XG4gICAgICAgIEBpZiAoIWlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGFwcC1idG4gW3RleHRdPVwiaXNQaWN0dXJlKCkgPyAnVGFrZSBQaWN0dXJlJyA6ICdSZWNvcmQgVmlkZW8nXCIgKG1jbGljayk9XCJpc1BpY3R1cmUoKSA/IHRha2VQaWN0dXJlKCkgOiBzdGFydFJlY29yZGluZygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxhcHAtYnRuIHRleHQ9XCJ7e2lzUGF1c2VkKCk/J1BsYXknOiAnUGF1c2UnfX0gUmVjb3JkaW5nXCIgKG1jbGljayk9XCJwYXVzZVJlY29yZGluZygpXCIgdHlwZT1cIm91dGxpbmVcIiBbaWNvbl09XCJpc1BhdXNlZCgpPydwbGF5JzoncGF1c2UnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGFwcC1idG4gW3RleHRdPVwiJ1N0b3AgUmVjb3JkaW5nJ1wiIChtY2xpY2spPVwic3RvcFJlY29yZGluZygpXCIgdHlwZT1cImRhbmdlclwiIGljb249XCJzdG9wXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3N0cmVhbVZpZGVvVGVtcD5cbiAgPGRpdiBjbGFzcz1cIndtLXJlY29yZGluZy12aWRlby1jb250XCI+XG4gICAgPHZpZGVvICNyZWNvcmRpbmdWaWRlb1RhZyBbc3JjT2JqZWN0XT1cInN0cmVhbSgpXCIgYXV0b3BsYXkgY2xhc3M9XCJ3bS1yZWNvcmRpbmctdmlkZW8ge3sgZXh0cmFDbGFzcygpIH19XCI+PC92aWRlbz5cbiAgICBAaWYgKGlzUmVjb3JkaW5nKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ3bS1yZWNvcmRpbmdEb3RcIj48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuQGlmIChjb21wdXRlZFByZXZpZXcoKSkge1xuICA8ZGl2IGNsYXNzPVwid20tcHJldmlld1wiPlxuICAgIDxkaXY+XG4gICAgICBAaWYgKGlzUGljdHVyZSgpKSB7XG4gICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCgpXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQoKVwiIFtzcmNdPVwicGhvdG9TcmMoKVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHZpZGVvIGNsYXNzPVwidy0xMDBcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGgoKVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0KClcIiBbc3JjXT1cIm1lZGlhRmlsZSgpXCI+PC92aWRlbz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMyByb3cgcm93LWNvbHMtbGctYXV0byBnLTNcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxhcHAtYnRuIHRleHQ9XCJSZXRha2Uge3sgc3ViamVjdCgpIH19XCIgdHlwZT1cIm91dGxpbmVcIiAobWNsaWNrKT1cImNsZWFyKClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXBwLWJ0biAobWNsaWNrKT1cInNhdmUoKVwiIHRleHQ9XCJEb25lXCIgdHlwZT1cInByaW1hcnlcIiBpY29uPVwic2F2ZVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxhcHAtYnRuIChtY2xpY2spPVwiY2FuY2VsKClcIiB0ZXh0PVwiQ2FuY2VsXCIgdHlwZT1cImRhbmdlclwiIGljb249XCJjYW5jZWxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLW1lZGlhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy93ZWJjYW0tbWVkaWEvd2ViY2FtLW1lZGlhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy93ZWJjYW0tbWVkaWEvd2ViY2FtLW1lZGlhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBRU4sUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUEwQixNQUFNLEVBQXVCLEdBQUcsRUFBRSxVQUFVLEVBQW9CLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzdELE1BQU0sT0FBTyxvQkFBb0I7SUFQakM7UUFRWSxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNsQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFDNUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFrQixD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SUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7WUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQXhSVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix3eURDMUJqQyw0cEVBNERBLHNrQkR0Q1ksWUFBWSxzTUFBRSxZQUFZLDZiQUFFLGVBQWU7OzJGQUkxQyxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDOzhCQUs1QyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBkZWJvdW5jZSwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZyb21FdmVudCwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi13ZWJjYW0tbWVkaWEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdG5Db21wb25lbnQsIExvYWRlckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi93ZWJjYW0tbWVkaWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vd2ViY2FtLW1lZGlhLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgV2ViY2FtTWVkaWFDb21wb25lbnQge1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICBAT3V0cHV0KCkgcmVjb3JkZXJTdG9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIHJlY29yZGVyRXJyb3JlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRlclN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgcmVjb3JkaW5nU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZGluZ1N0YXRlPigpO1xuICBAT3V0cHV0KCkgcmVjb3JkaW5nQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZSB8IHVuZGVmaW5lZD4oKTtcblxuICBpc1ZpZGVvID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgdXNlQXVkaW8gPSBpbnB1dDxib29sZWFuPigpO1xuICBmaWxlTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgZmlsZU5hbWVGYWN0b3J5ID0gaW5wdXQ8KGNvbXA6IFdlYmNhbU1lZGlhQ29tcG9uZW50KSA9PiBzdHJpbmc+KCk7XG4gIGZpbGVUeXBlID0gaW5wdXQ8c3RyaW5nPigpO1xuICBleHRyYUNsYXNzID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvKipcbiAgICogU2Vjb25kc1xuICAgKi9cbiAgcmVjb3JkaW5nTm90aWZpY2F0aW9uSW50ZXJ2YWwgPSBpbnB1dDxudW1iZXI+KDUpO1xuICBpc0JhY2tncm91bmQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29tcHV0ZWRSZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCA9IGNvbXB1dGVkPG51bWJlcj4oKCkgPT4gKHRoaXMucmVjb3JkaW5nTm90aWZpY2F0aW9uSW50ZXJ2YWwoKSB8fCA1KSAqIDEwMDApO1xuICBpc1BpY3R1cmUgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5pc1ZpZGVvKCkpO1xuXG4gIHN1YmplY3QgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5pc1BpY3R1cmUoKSA/ICdJbWFnZScgOiAnVmlkZW8nKSk7XG5cbiAgaXNQYXVzZWQgPSB0b1NpZ25hbCh0aGlzLnJlY29yZGluZ1N0YXRlLnBpcGUobWFwKChyKSA9PiByID09ICdwYXVzZWQnKSkpO1xuXG4gIGNvbXB1dGVkRmlsZVR5cGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZnQgPSB0aGlzLmZpbGVUeXBlKCksXG4gICAgICBpc3AgPSB0aGlzLmlzUGljdHVyZSgpO1xuICAgIHJldHVybiBmdCB8fCAoaXNwID8gJ2ltYWdlL2pwZWcnIDogJ3ZpZGVvL21wNCcpO1xuICB9KTtcbiAgY29tcHV0ZWRGaWxlRXh0ZW5zaW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlZEZpbGVUeXBlKCk/LnNwbGl0KCcvJylbMV0pO1xuICBjb21wdXRlZEZpbGVOYW1lID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZmID0gdGhpcy5maWxlTmFtZUZhY3RvcnkoKSxcbiAgICAgIGZuID0gdGhpcy5maWxlTmFtZSgpIHx8IGZmPy4odGhpcyksXG4gICAgICBmeCA9IHRoaXMuY29tcHV0ZWRGaWxlRXh0ZW5zaW9uKCksXG4gICAgICBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0KCk7XG4gICAgcmV0dXJuIGZuPy5pbmNsdWRlcygnLicgKyBmeCkgPyBmbiA6IGAke2ZuIHx8IHN1YmplY3R9LiR7Znh9YDtcbiAgfSk7XG5cbiAgc3RyZWFtaW5nVmlkZW9UZW1wbGF0ZSA9IHZpZXdDaGlsZDxUZW1wbGF0ZVJlZjxhbnk+Pignc3RyZWFtVmlkZW9UZW1wJyk7XG4gIHJlY29yZGluZ1ZpZGVvUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD4+KCdyZWNvcmRpbmdWaWRlb1RhZycpO1xuICByZWNvcmRpbmdWaWRlb1JlZkVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWNvcmRpbmdWaWRlb1JlZigpPy5uYXRpdmVFbGVtZW50KTtcblxuICBzdHJlYW1pbmcgPSBzaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJldmlldyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIGNvbXB1dGVkUHJldmlldyA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+ICF0aGlzLmlzQmFja2dyb3VuZCgpICYmIHRoaXMucHJldmlldygpKTtcblxuICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgY2FwdHVyZWQgcGhvdG8uIFdlIHdpbGwgc2V0IHRoZVxuICAvLyB3aWR0aCB0byB0aGUgdmFsdWUgZGVmaW5lZCBoZXJlLCBidXQgdGhlIGhlaWdodCB3aWxsIGJlXG4gIC8vIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGFzcGVjdCByYXRpbyBvZiB0aGUgaW5wdXQgc3RyZWFtLlxuXG4gIHdpZHRoID0gbW9kZWw8bnVtYmVyPigxMDgwKTsgLy8gV2Ugd2lsbCBzY2FsZSB0aGUgcGhvdG8gd2lkdGggdG8gdGhpc1xuICBoZWlnaHQgPSBjb21wdXRlZDxudW1iZXI+KCgpID0+IHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGgoKTtcbiAgICByZXR1cm4gd2lkdGggLyAoNCAvIDMpO1xuICB9KTsgLy8gVGhpcyB3aWxsIGJlIGNvbXB1dGVkIGJhc2VkIG9uIHRoZSBpbnB1dCBzdHJlYW1cblxuICAvLyBUaGUgdmFyaW91cyBIVE1MIGVsZW1lbnRzIHdlIG5lZWQgdG8gY29uZmlndXJlIG9yIGNvbnRyb2wuIFRoZXNlXG4gIC8vIHdpbGwgYmUgc2V0IGJ5IHRoZSBzdGFydHVwKCkgZnVuY3Rpb24uXG5cbiAgcHJvdGVjdGVkIGNhbnZhcyA9IHNpZ25hbDxIVE1MQ2FudmFzRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgbWVkaWFGaWxlID0gc2lnbmFsPEZpbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHBob3RvU3JjID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgdmlkZW9TcmMgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHN0cmVhbSA9IHNpZ25hbDxNZWRpYVN0cmVhbT4odW5kZWZpbmVkKTtcblxuICBzdWI6IFN1YnNjcmlwdGlvbjtcbiAgcmVjb3JkZXI6IE1lZGlhUmVjb3JkZXI7XG4gIGlzUmVjb3JkaW5nID0gdG9TaWduYWw8Ym9vbGVhbj4odGhpcy5yZWNvcmRpbmdTdGF0ZS5waXBlKG1hcCgocikgPT4gciA9PSAncmVjb3JkaW5nJyB8fCByID09ICdwYXVzZWQnKSkpO1xuICByZWNvcmRlZEJsb2JzOiBCbG9iW10gPSBbXTtcblxuICByZWNvcmRlZFRpbWUgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRVcFdlYmNhbSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbG9zZVdlYmNhbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB3ZWJjYW0gc3RyZWFtXG4gICAqL1xuICBzdGFydFVwV2ViY2FtKCkge1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAgIC5nZXRVc2VyTWVkaWEoeyB2aWRlbzogdHJ1ZSwgYXVkaW86IHRoaXMudXNlQXVkaW8oKSB9KVxuICAgICAgLnRoZW4oKHN0cmVhbSkgPT4ge1xuICAgICAgICB0aGlzLnN0cmVhbWluZy5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAvLyBzdHJlYW0ub25hZGR0cmFjayA9ICgpID0+IHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNhbnZhcy5zZXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykpO1xuICAgICAgICB0aGlzLmNhbnZhcygpPy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdGhpcy53aWR0aCgpICsgJ3B4Jyk7XG4gICAgICAgIHRoaXMuY2FudmFzKCk/LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgdGhpcy5oZWlnaHQoKSArICdweCcpO1xuICAgICAgICB0aGlzLnN0cmVhbS5zZXQoc3RyZWFtKTtcbiAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQ6YCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlIHRoYXQgdGhlIHVzZXIgaXMgZG9uZSB3aXRoIHRoZSB3ZWJjYW0gY29tcG9uZW50LlxuICAgKlxuICAgKiBBbnkgbWVkaWEgb2J0YWluZWQgd2lsbCBiZSBlbWl0dGVkXG4gICAqL1xuICBzYXZlKCkge1xuICAgIGlmICh0aGlzLmlzUGljdHVyZSgpKVxuICAgICAgbmV3IE9ic2VydmFibGU8RmlsZT4oKHN1YikgPT5cbiAgICAgICAgdGhpcy5jYW52YXMoKSEudG9CbG9iKFxuICAgICAgICAgIChibG9iKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvYikge1xuICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsZS5zZXQobmV3IEZpbGUoW2Jsb2JdLCB0aGlzLmNvbXB1dGVkRmlsZU5hbWUoKSkpO1xuICAgICAgICAgICAgICBzdWIubmV4dCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgICAgICAgICAgc3ViLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Ugc3ViLmVycm9yKGBObyAke3RoaXMuc3ViamVjdCgpfSBmaWxlIGdlbmVyYXRlZGApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5jb21wdXRlZEZpbGVUeXBlKCksXG4gICAgICAgICAgMSxcbiAgICAgICAgKSxcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgICAgdGhpcy5jbG9zZVdlYmNhbSgpO1xuICAgICAgfSk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KHRoaXMubWVkaWFGaWxlKCkpO1xuICAgICAgdGhpcy5jbG9zZVdlYmNhbSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSB1c2VyIGlzIGRvbmUgd2l0aCB0aGUgd2ViY2FtIGNvbXBvbmVudC5cbiAgICpcbiAgICogQW55IG1lZGlhIG9idGFpbmVkIHdpbGwgYmUgZGVsZXRlZFxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuY2xvc2VkLmVtaXQobnVsbCk7XG4gICAgdGhpcy5jbG9zZVdlYmNhbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBtZWRpYSB0YWtlbiBhbmQgY2xvc2UgcHJldmlld1xuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuY2FudmFzKCkpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNhbnZhcygpPy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgY29udGV4dCEuZmlsbFN0eWxlID0gJyNBQUEnO1xuICAgICAgY29udGV4dCEuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMoKSEud2lkdGgsIHRoaXMuY2FudmFzKCkhLmhlaWdodCk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhcygpIS50b0RhdGFVUkwodGhpcy5jb21wdXRlZEZpbGVUeXBlKCkpO1xuICAgICAgdGhpcy5waG90b1NyYy5zZXQoZGF0YSk7XG4gICAgICB0aGlzLnN0cmVhbWluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnByZXZpZXcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2h1dGRvd24gdGhlIHdlYmNhbSBzdHJlYW1cbiAgICovXG4gIGNsb3NlV2ViY2FtKCkge1xuICAgIHRoaXMuc3RyZWFtKClcbiAgICAgID8uZ2V0VHJhY2tzKClcbiAgICAgIC5mb3JFYWNoKCh4KSA9PiB4LnN0b3AoKSk7XG4gICAgdGhpcy5zdHJlYW0uc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zdHJlYW1pbmcuc2V0KHVuZGVmaW5lZCk7XG4gICAgLy8gdGhpcy5zdHJlYW0uc2V0KHRoaXMuc3RyZWFtKCk/LmdldFRyYWNrc1swXS5zdG9wKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBwaG90byBieSBmZXRjaGluZyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdmlkZW9cbiAgICogYW5kIGRyYXdpbmcgaXQgaW50byBhIGNhbnZhcywgdGhlbiBjb252ZXJ0aW5nIHRoYXQgdG8gYSBQTkdcbiAgICogZm9ybWF0IGRhdGEgVVJMLlxuICAgKlxuICAgKiBCeSBkcmF3aW5nIGl0IG9uIGFuIG9mZnNjcmVlbiBjYW52YXMgYW5kIHRoZW5cbiAgICogZHJhd2luZyB0aGF0IHRvIHRoZSBzY3JlZW4sIHdlIGNhbiBjaGFuZ2UgaXRzIHNpemUgYW5kL29yIGFwcGx5XG4gICAqIG90aGVyIGNoYW5nZXMgYmVmb3JlIGRyYXdpbmcgaXQuXG4gICAqL1xuICB0YWtlUGljdHVyZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNQaWN0dXJlKCkpIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jYW52YXMoKSEuZ2V0Q29udGV4dCgnMmQnKSxcbiAgICAgIHdpZHRoID0gdGhpcy53aWR0aCgpLFxuICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQoKTtcbiAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmIGNvbnRleHQpIHtcbiAgICAgIHRoaXMuY2FudmFzLnVwZGF0ZSgoY2FudmFzKSA9PiB7XG4gICAgICAgIGlmIChjYW52YXMpIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNhbnZhcy51cGRhdGUoKGNhbnZhcykgPT4ge1xuICAgICAgICBpZiAoY2FudmFzKSBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgfSk7XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZSh0aGlzLnJlY29yZGluZ1ZpZGVvUmVmRWwoKSEsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXMoKSEudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICAgIHRoaXMucGhvdG9TcmMuc2V0KGRhdGEpO1xuICAgIH0gZWxzZSB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLnN0cmVhbWluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMucHJldmlldy5zZXQodHJ1ZSk7XG4gIH1cblxuICBzdGFydFJlY29yZGluZyA9IChzdHJlYW0gPSB0aGlzLnN0cmVhbSgpKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzVmlkZW8oKSkgcmV0dXJuO1xuICAgIHRoaXMucmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNvcmRlcihzdHJlYW0pO1xuXG4gICAgdGhpcy5yZWNvcmRlZEJsb2JzID0gW107XG4gICAgdGhpcy5yZWNvcmRlZFRpbWUuc2V0KDApO1xuICAgIGNvbnN0IGxlbmd0aHM6IFtudW1iZXIsIG51bWJlcl1bXSA9IFtdO1xuICAgIHRoaXMucmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnJlY29yZGVkQmxvYnMucHVzaChldmVudC5kYXRhKTtcbiAgICAgIHRoaXMubWVkaWFGaWxlLnNldChuZXcgRmlsZSh0aGlzLnJlY29yZGVkQmxvYnMsIHRoaXMuY29tcHV0ZWRGaWxlTmFtZSgpLCB7IHR5cGU6IHRoaXMuY29tcHV0ZWRGaWxlVHlwZSgpIH0pKTtcbiAgICAgIGxlbmd0aHMucHVzaChbdGhpcy5tZWRpYUZpbGUoKS5zaXplLCBldmVudC5kYXRhLnNpemVdKTtcbiAgICB9O1xuICAgIC8vIHRoaXMucmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gKGV2ZW50KSA9PiB7XG4gICAgLy8gICB0aGlzLnJlY29yZGVkQmxvYnMgPSBbZXZlbnQuZGF0YV07XG4gICAgLy8gICBsZW5ndGhzLnB1c2goZXZlbnQuZGF0YS5zaXplKTtcbiAgICAvLyB9O1xuICAgIC8vIHRoaXMucmVjb3JkZXIub25kYXRhYXZhaWxhYmxlID0gKGV2ZW50KSA9PiB0aGlzLnJlY29yZGVkQmxvYnMucHVzaChldmVudC5kYXRhKTtcblxuICAgIHRoaXMucmVjb3JkZXIuc3RhcnQoKTtcbiAgICBsZXQgbm90aWZTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBjb25zdCBzdGFydFRpbWVyID0gKCkgPT4ge1xuICAgICAgbGV0IGxhc3REYXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgICBub3RpZlN1YiA9IHRpbWVyKDEwMDAsIDEwMDApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlY29yZGVkVGltZS51cGRhdGUoKHQpID0+ICh0ICs9IDEpKSksXG4gICAgICAgICAgdGFwKCgpID0+IGNvbnNvbGUubG9nKERhdGUubm93KCksIHRoaXMuY29tcHV0ZWRSZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCgpLCB0aGlzLnJlY29yZGluZ05vdGlmaWNhdGlvbkludGVydmFsKCkpKSxcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gRGF0ZS5ub3coKSAtIGxhc3REYXRlVGltZSA+IHRoaXMuY29tcHV0ZWRSZWNvcmRpbmdOb3RpZmljYXRpb25JbnRlcnZhbCgpKSxcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZWNvcmRlci5yZXF1ZXN0RGF0YSgpKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgbGFzdERhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB0aGlzLnJlY29yZGluZ0NoYW5nZWQuZW1pdCh0aGlzLm1lZGlhRmlsZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZGVyLm9uc3RhcnQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRpbmdTdGF0ZS5lbWl0KHRoaXMucmVjb3JkZXIuc3RhdGUpO1xuICAgICAgdGhpcy5yZWNvcmRlclN0YXJ0ZWQuZW1pdChlKTtcbiAgICAgIHN0YXJ0VGltZXIoKTtcbiAgICB9O1xuICAgIHRoaXMucmVjb3JkZXIub25zdG9wID0gKGUpID0+IHtcbiAgICAgIHRoaXMucmVjb3JkaW5nU3RhdGUuZW1pdCh0aGlzLnJlY29yZGVyLnN0YXRlKTtcbiAgICAgIHRoaXMucmVjb3JkZXJTdG9wcGVkLmVtaXQoZSk7XG4gICAgICBjb25zb2xlLmxvZygnbmV3IGxlbmd0aCcsIGxlbmd0aHMpO1xuICAgICAgbm90aWZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZGVyLm9ucGF1c2UgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5yZWNvcmRpbmdTdGF0ZS5lbWl0KHRoaXMucmVjb3JkZXIuc3RhdGUpO1xuICAgICAgbm90aWZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICB0aGlzLnJlY29yZGVyLm9ucmVzdW1lID0gKGUpID0+IHtcbiAgICAgIHRoaXMucmVjb3JkaW5nU3RhdGUuZW1pdCh0aGlzLnJlY29yZGVyLnN0YXRlKTtcbiAgICAgIHN0YXJ0VGltZXIoKTtcbiAgICB9O1xuICAgIHRoaXMucmVjb3JkZXIub25lcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLnJlY29yZGluZ1N0YXRlLmVtaXQodGhpcy5yZWNvcmRlci5zdGF0ZSk7XG4gICAgICB0aGlzLnJlY29yZGVyRXJyb3JlZC5lbWl0KGUpO1xuICAgICAgbm90aWZTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgfTtcblxuICBzdG9wUmVjb3JkaW5nKCkge1xuICAgIGlmICh0aGlzLnJlY29yZGVyLnN0YXRlID09PSAncmVjb3JkaW5nJykgdGhpcy5yZWNvcmRlci5zdG9wKCk7XG5cbiAgICB0aGlzLnByZXZpZXcuc2V0KHRydWUpO1xuICAgIHRoaXMuc3RyZWFtaW5nLnNldChmYWxzZSk7XG4gIH1cblxuICBwYXVzZVJlY29yZGluZygpIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5yZWNvcmRlci5zdGF0ZSA9PT0gJ3BhdXNlZCcpIHRoaXMucmVjb3JkZXIucmVzdW1lKCk7XG4gICAgZWxzZSB0aGlzLnJlY29yZGVyLnBhdXNlKCk7XG4gIH1cbn1cbiIsIjxsb2FkZXIgW2xvYWRpbmddPVwibG9hZGluZygpXCI+XG4gIDxkaXYgY2xhc3M9XCJcIiBbaGlkZGVuXT1cInN0cmVhbWluZygpICE9IHRydWUgfHwgaXNCYWNrZ3JvdW5kKClcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RyZWFtVmlkZW9UZW1wXCIgLz5cblxuICAgIEBpZiAoIWlzQmFja2dyb3VuZCgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwid20tYnV0dG9uc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHJvdy1jb2xzLWxnLWF1dG8gZy0zIGp1c3RpZnktY29udGVudC1zdGFydFwiPlxuICAgICAgICAgIEBpZiAoIWlzUmVjb3JkaW5nKCkpIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxhcHAtYnRuIFt0ZXh0XT1cImlzUGljdHVyZSgpID8gJ1Rha2UgUGljdHVyZScgOiAnUmVjb3JkIFZpZGVvJ1wiIChtY2xpY2spPVwiaXNQaWN0dXJlKCkgPyB0YWtlUGljdHVyZSgpIDogc3RhcnRSZWNvcmRpbmcoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICAgICAgdGV4dD1cInt7IGlzUGF1c2VkKCkgPyAnUGxheScgOiAnUGF1c2UnIH19IFJlY29yZGluZ1wiXG4gICAgICAgICAgICAgICAgKG1jbGljayk9XCJwYXVzZVJlY29yZGluZygpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiaXNQYXVzZWQoKSA/ICdwbGF5JyA6ICdwYXVzZSdcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YXBwLWJ0biBbdGV4dF09XCInU3RvcCBSZWNvcmRpbmcnXCIgKG1jbGljayk9XCJzdG9wUmVjb3JkaW5nKClcIiB0eXBlPVwiZGFuZ2VyXCIgaWNvbj1cInN0b3BcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNzdHJlYW1WaWRlb1RlbXA+XG4gICAgPGRpdiBjbGFzcz1cIndtLXJlY29yZGluZy12aWRlby1jb250XCI+XG4gICAgICA8dmlkZW8gI3JlY29yZGluZ1ZpZGVvVGFnIFtzcmNPYmplY3RdPVwic3RyZWFtKClcIiBhdXRvcGxheSBjbGFzcz1cIndtLXJlY29yZGluZy12aWRlbyB7eyBleHRyYUNsYXNzKCkgfX1cIj48L3ZpZGVvPlxuICAgICAgQGlmIChpc1JlY29yZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3bS1yZWNvcmRpbmdEb3RcIj48L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICBAaWYgKGNvbXB1dGVkUHJldmlldygpKSB7XG4gICAgPGRpdiBjbGFzcz1cIndtLXByZXZpZXdcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAoaXNQaWN0dXJlKCkpIHtcbiAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDBcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGgoKVwiIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0KClcIiBbc3JjXT1cInBob3RvU3JjKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8dmlkZW8gY2xhc3M9XCJ3LTEwMFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCgpXCIgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHQoKVwiIFtzcmNdPVwibWVkaWFGaWxlKClcIj48L3ZpZGVvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHJvdyByb3ctY29scy1sZy1hdXRvIGctM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxhcHAtYnRuIHRleHQ9XCJSZXRha2Uge3sgc3ViamVjdCgpIH19XCIgdHlwZT1cIm91dGxpbmVcIiAobWNsaWNrKT1cImNsZWFyKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YXBwLWJ0biAobWNsaWNrKT1cInNhdmUoKVwiIHRleHQ9XCJEb25lXCIgdHlwZT1cInByaW1hcnlcIiBpY29uPVwic2F2ZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxhcHAtYnRuIChtY2xpY2spPVwiY2FuY2VsKClcIiB0ZXh0PVwiQ2FuY2VsXCIgdHlwZT1cImRhbmdlclwiIGljb249XCJjYW5jZWxcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2xvYWRlcj5cbiJdfQ==
|
|
@@ -12130,6 +12130,7 @@ class WebcamMediaComponent {
|
|
|
12130
12130
|
this.isRecording = toSignal(this.recordingState.pipe(map$1((r) => r == 'recording' || r == 'paused')));
|
|
12131
12131
|
this.recordedBlobs = [];
|
|
12132
12132
|
this.recordedTime = signal(0);
|
|
12133
|
+
this.loading = signal(false);
|
|
12133
12134
|
this.startRecording = (stream = this.stream()) => {
|
|
12134
12135
|
if (!this.isVideo())
|
|
12135
12136
|
return;
|
|
@@ -12189,16 +12190,20 @@ class WebcamMediaComponent {
|
|
|
12189
12190
|
}
|
|
12190
12191
|
ngOnDestroy() {
|
|
12191
12192
|
this.sub?.unsubscribe();
|
|
12193
|
+
this.closeWebcam();
|
|
12192
12194
|
}
|
|
12193
12195
|
/**
|
|
12194
12196
|
* Start the webcam stream
|
|
12195
12197
|
*/
|
|
12196
12198
|
startUpWebcam() {
|
|
12199
|
+
this.loading.set(true);
|
|
12197
12200
|
this.clear();
|
|
12198
12201
|
navigator.mediaDevices
|
|
12199
12202
|
.getUserMedia({ video: true, audio: this.useAudio() })
|
|
12200
12203
|
.then((stream) => {
|
|
12201
12204
|
this.streaming.set(true);
|
|
12205
|
+
this.loading.set(false);
|
|
12206
|
+
// stream.onaddtrack = () => this.loading.set(false);
|
|
12202
12207
|
this.canvas.set(document.createElement('canvas'));
|
|
12203
12208
|
this.canvas()?.setAttribute('width', this.width() + 'px');
|
|
12204
12209
|
this.canvas()?.setAttribute('height', this.height() + 'px');
|
|
@@ -12314,11 +12319,11 @@ class WebcamMediaComponent {
|
|
|
12314
12319
|
this.recorder.pause();
|
|
12315
12320
|
}
|
|
12316
12321
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: WebcamMediaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12317
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: WebcamMediaComponent, isStandalone: true, selector: "lib-webcam-media", inputs: { isVideo: { classPropertyName: "isVideo", publicName: "isVideo", isSignal: true, isRequired: false, transformFunction: null }, useAudio: { classPropertyName: "useAudio", publicName: "useAudio", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, fileNameFactory: { classPropertyName: "fileNameFactory", publicName: "fileNameFactory", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: "fileType", publicName: "fileType", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, recordingNotificationInterval: { classPropertyName: "recordingNotificationInterval", publicName: "recordingNotificationInterval", isSignal: true, isRequired: false, transformFunction: null }, isBackground: { classPropertyName: "isBackground", publicName: "isBackground", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", recorderStopped: "recorderStopped", recorderErrored: "recorderErrored", recorderStarted: "recorderStarted", recordingState: "recordingState", recordingChanged: "recordingChanged", width: "widthChange" }, viewQueries: [{ propertyName: "streamingVideoTemplate", first: true, predicate: ["streamVideoTemp"], descendants: true, isSignal: true }, { propertyName: "recordingVideoRef", first: true, predicate: ["recordingVideoTag"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n
|
|
12322
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: WebcamMediaComponent, isStandalone: true, selector: "lib-webcam-media", inputs: { isVideo: { classPropertyName: "isVideo", publicName: "isVideo", isSignal: true, isRequired: false, transformFunction: null }, useAudio: { classPropertyName: "useAudio", publicName: "useAudio", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, fileNameFactory: { classPropertyName: "fileNameFactory", publicName: "fileNameFactory", isSignal: true, isRequired: false, transformFunction: null }, fileType: { classPropertyName: "fileType", publicName: "fileType", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, recordingNotificationInterval: { classPropertyName: "recordingNotificationInterval", publicName: "recordingNotificationInterval", isSignal: true, isRequired: false, transformFunction: null }, isBackground: { classPropertyName: "isBackground", publicName: "isBackground", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", recorderStopped: "recorderStopped", recorderErrored: "recorderErrored", recorderStarted: "recorderStarted", recordingState: "recordingState", recordingChanged: "recordingChanged", width: "widthChange" }, viewQueries: [{ propertyName: "streamingVideoTemplate", first: true, predicate: ["streamVideoTemp"], descendants: true, isSignal: true }, { propertyName: "recordingVideoRef", first: true, predicate: ["recordingVideoTag"], descendants: true, isSignal: true }], ngImport: i0, template: "<loader [loading]=\"loading()\">\n <div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n <ng-container *ngTemplateOutlet=\"streamVideoTemp\" />\n\n @if (!isBackground()) {\n <div class=\"wm-buttons\">\n <div class=\"row row-cols-lg-auto g-3 justify-content-start\">\n @if (!isRecording()) {\n <div>\n <app-btn [text]=\"isPicture() ? 'Take Picture' : 'Record Video'\" (mclick)=\"isPicture() ? takePicture() : startRecording()\" />\n </div>\n } @else {\n <div>\n <app-btn\n text=\"{{ isPaused() ? 'Play' : 'Pause' }} Recording\"\n (mclick)=\"pauseRecording()\"\n type=\"outline\"\n [icon]=\"isPaused() ? 'play' : 'pause'\" />\n </div>\n <div>\n <app-btn [text]=\"'Stop Recording'\" (mclick)=\"stopRecording()\" type=\"danger\" icon=\"stop\" />\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template #streamVideoTemp>\n <div class=\"wm-recording-video-cont\">\n <video #recordingVideoTag [srcObject]=\"stream()\" autoplay class=\"wm-recording-video {{ extraClass() }}\"></video>\n @if (isRecording()) {\n <div class=\"wm-recordingDot\"></div>\n }\n </div>\n </ng-template>\n\n @if (computedPreview()) {\n <div class=\"wm-preview\">\n <div>\n @if (isPicture()) {\n <img class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"photoSrc()\" />\n } @else {\n <video class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"mediaFile()\"></video>\n }\n </div>\n <div class=\"mt-3 row row-cols-lg-auto g-3\">\n <div>\n <app-btn text=\"Retake {{ subject() }}\" type=\"outline\" (mclick)=\"clear()\" />\n </div>\n <div>\n <app-btn (mclick)=\"save()\" text=\"Done\" type=\"primary\" icon=\"save\" />\n </div>\n <div>\n <app-btn (mclick)=\"cancel()\" text=\"Cancel\" type=\"danger\" icon=\"cancel\" />\n </div>\n </div>\n </div>\n }\n</loader>\n", styles: [":host{display:block}:host .wm-recording-video{width:100%}:host .wm-preview image,:host .wm-preview video{object-fit:contain}:host .wm-recording-video-cont{position:relative}@keyframes wmAnimateDot{0%{background-color:transparent}50%{background-color:#ff000086}}:host .wm-recordingDot{animation-name:wmAnimateDot;animation-duration:1s;animation-iteration-count:infinite;border-radius:5px;--dimen: 20px;width:var(--dimen);height:var(--dimen);position:absolute;top:10px;right:10px}:host .wm-buttons{margin-top:var(--space-16)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height"] }] }); }
|
|
12318
12323
|
}
|
|
12319
12324
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: WebcamMediaComponent, decorators: [{
|
|
12320
12325
|
type: Component,
|
|
12321
|
-
args: [{ selector: 'lib-webcam-media', standalone: true, imports: [CommonModule, BtnComponent], template: "<div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n
|
|
12326
|
+
args: [{ selector: 'lib-webcam-media', standalone: true, imports: [CommonModule, BtnComponent, LoaderComponent], template: "<loader [loading]=\"loading()\">\n <div class=\"\" [hidden]=\"streaming() != true || isBackground()\">\n <ng-container *ngTemplateOutlet=\"streamVideoTemp\" />\n\n @if (!isBackground()) {\n <div class=\"wm-buttons\">\n <div class=\"row row-cols-lg-auto g-3 justify-content-start\">\n @if (!isRecording()) {\n <div>\n <app-btn [text]=\"isPicture() ? 'Take Picture' : 'Record Video'\" (mclick)=\"isPicture() ? takePicture() : startRecording()\" />\n </div>\n } @else {\n <div>\n <app-btn\n text=\"{{ isPaused() ? 'Play' : 'Pause' }} Recording\"\n (mclick)=\"pauseRecording()\"\n type=\"outline\"\n [icon]=\"isPaused() ? 'play' : 'pause'\" />\n </div>\n <div>\n <app-btn [text]=\"'Stop Recording'\" (mclick)=\"stopRecording()\" type=\"danger\" icon=\"stop\" />\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <ng-template #streamVideoTemp>\n <div class=\"wm-recording-video-cont\">\n <video #recordingVideoTag [srcObject]=\"stream()\" autoplay class=\"wm-recording-video {{ extraClass() }}\"></video>\n @if (isRecording()) {\n <div class=\"wm-recordingDot\"></div>\n }\n </div>\n </ng-template>\n\n @if (computedPreview()) {\n <div class=\"wm-preview\">\n <div>\n @if (isPicture()) {\n <img class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"photoSrc()\" />\n } @else {\n <video class=\"w-100\" [style.width.px]=\"width()\" [style.height.px]=\"height()\" [src]=\"mediaFile()\"></video>\n }\n </div>\n <div class=\"mt-3 row row-cols-lg-auto g-3\">\n <div>\n <app-btn text=\"Retake {{ subject() }}\" type=\"outline\" (mclick)=\"clear()\" />\n </div>\n <div>\n <app-btn (mclick)=\"save()\" text=\"Done\" type=\"primary\" icon=\"save\" />\n </div>\n <div>\n <app-btn (mclick)=\"cancel()\" text=\"Cancel\" type=\"danger\" icon=\"cancel\" />\n </div>\n </div>\n </div>\n }\n</loader>\n", styles: [":host{display:block}:host .wm-recording-video{width:100%}:host .wm-preview image,:host .wm-preview video{object-fit:contain}:host .wm-recording-video-cont{position:relative}@keyframes wmAnimateDot{0%{background-color:transparent}50%{background-color:#ff000086}}:host .wm-recordingDot{animation-name:wmAnimateDot;animation-duration:1s;animation-iteration-count:infinite;border-radius:5px;--dimen: 20px;width:var(--dimen);height:var(--dimen);position:absolute;top:10px;right:10px}:host .wm-buttons{margin-top:var(--space-16)}\n"] }]
|
|
12322
12327
|
}], propDecorators: { closed: [{
|
|
12323
12328
|
type: Output
|
|
12324
12329
|
}], recorderStopped: [{
|
|
@@ -12396,11 +12401,11 @@ class FileUploadComponent {
|
|
|
12396
12401
|
inp.click();
|
|
12397
12402
|
}
|
|
12398
12403
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12399
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", fileChange: "fileChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["modalOpen", "modalClose"] }, { kind: "directive", type: ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "widthChange"] }] }); }
|
|
12404
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: FileUploadComponent, isStandalone: true, selector: "app-file-upload", inputs: { help: { classPropertyName: "help", publicName: "help", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: false, isRequired: false, transformFunction: null }, mediaWidth: { classPropertyName: "mediaWidth", publicName: "mediaWidth", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, useWebcam: { classPropertyName: "useWebcam", publicName: "useWebcam", isSignal: true, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, mini: { classPropertyName: "mini", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, useDocumentModal: { classPropertyName: "useDocumentModal", publicName: "useDocumentModal", isSignal: false, isRequired: false, transformFunction: null }, listFiles: { classPropertyName: "listFiles", publicName: "listFiles", isSignal: true, isRequired: false, transformFunction: null }, _accept: { classPropertyName: "_accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, file: { classPropertyName: "file", publicName: "file", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mediaWidth: "mediaWidthChange", fileChange: "fileChange", filesChange: "filesChange" }, ngImport: i0, template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "disabled", "form", "forms", "help", "iconBtn", "loading", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid"], outputs: ["mclick"] }, { kind: "component", type: ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["modalOpen", "modalClose"] }, { kind: "directive", type: ModalBodyDirective, selector: "[modalBody]" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i3$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: WebcamMediaComponent, selector: "lib-webcam-media", inputs: ["isVideo", "useAudio", "fileName", "fileNameFactory", "fileType", "extraClass", "recordingNotificationInterval", "isBackground", "width"], outputs: ["closed", "recorderStopped", "recorderErrored", "recorderStarted", "recordingState", "recordingChanged", "widthChange"] }] }); }
|
|
12400
12405
|
}
|
|
12401
12406
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FileUploadComponent, decorators: [{
|
|
12402
12407
|
type: Component,
|
|
12403
|
-
args: [{ selector: 'app-file-upload', standalone: true, imports: [NgIf, NgClass, NgFor, BtnComponent, ModalComponents, MatMenuModule, WebcamMediaComponent], template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"] }]
|
|
12408
|
+
args: [{ selector: 'app-file-upload', standalone: true, imports: [NgIf, NgClass, NgFor, BtnComponent, ModalComponents, MatMenuModule, WebcamMediaComponent], template: "@if (listFiles()) {\n <div [ngClass]=\"{ meta: mini() }\" class=\"{{ class() }} form-label mb-2 hide-scroll\">\n @for (item of files; track item) {\n <div class=\"row align-items-start mb-1\">\n <div class=\"col\">\n <div class=\"hide-scroll file-name\">\n {{ item?.name }}\n </div>\n </div>\n <div class=\"col-auto text-end\">\n <span class=\"text-danger pointer p-1 fa fa-close\" (click)=\"removeFile($index)\"></span>\n </div>\n </div>\n }\n </div>\n}\n<!-- <input type=\"file\" style=\"display: none;\" accept=\"{{accept}}\" (change)=\"onUpload($event)\" #uploadInput [multiple]=\"multiple\"> -->\n<app-btn\n icon=\"upload\"\n (mclick)=\"useWebcam() ? null : openDialog()\"\n [type]=\"file ? 'primary' : 'secondary'\"\n [disabled]=\"disabled\"\n [help]=\"help\"\n [text]=\"label\"\n [matMenuTriggerFor]=\"useWebcam() ? menu : null\" />\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"openDialog()\">Upload</button>\n <button mat-menu-item (click)=\"webcamModal.open()\">Use Camera</button>\n</mat-menu>\n\n<modal-comp #webcamModal width=\"1080px\" [showFooter]=\"false\" header=\"Webcam\">\n <ng-template modalBody>\n <lib-webcam-media [fileName]=\"fileName()\" [width]=\"mediaWidth()\" (closed)=\"webcamModal.close(); acceptFiles($event)\" />\n </ng-template>\n</modal-comp>\n", styles: [".meta,.file-name{height:23px}.meta{overflow-y:auto}.file-name{overflow:auto}\n"] }]
|
|
12404
12409
|
}], ctorParameters: () => [], propDecorators: { help: [{
|
|
12405
12410
|
type: Input
|
|
12406
12411
|
}], label: [{
|