@smartbit4all/ng-client 4.2.41 → 4.2.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/esm2022/lib/smart-dialog/smartdialog.service.mjs +7 -4
  2. package/esm2022/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -3
  3. package/esm2022/lib/smart-grid/smart-grid.component.mjs +2 -4
  4. package/esm2022/lib/smart-map/impl/leaflet-map.mjs +2 -2
  5. package/esm2022/lib/smart-table/smarttable.model.mjs +10 -4
  6. package/esm2022/lib/smart-table/tables/table.mjs +7 -3
  7. package/esm2022/lib/view-context/api/api-default/binaryData.mjs +2 -0
  8. package/esm2022/lib/view-context/api/api-default/invocationError.mjs +2 -0
  9. package/esm2022/lib/view-context/api/api-default/invocationRequest.mjs +2 -0
  10. package/esm2022/lib/view-context/api/model/models.mjs +3 -1
  11. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
  12. package/esm2022/lib/view-context/api/model/smartLinkMigrationStatus.mjs +8 -0
  13. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -12
  14. package/esm2022/lib/view-context/api/model/uploadWidgetType.mjs +19 -0
  15. package/esm2022/lib/view-context/api/model/uploadedFile.mjs +1 -12
  16. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +2 -12
  17. package/esm2022/lib/view-context/projects.mjs +4 -1
  18. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/photo-capture-widget/photo-capture-widget.component.mjs +127 -0
  19. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.mjs +82 -23
  20. package/esm2022/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/voice-record-widget/voice-record-widget.component.mjs +156 -0
  21. package/esm2022/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.mjs +184 -0
  22. package/esm2022/lib/view-context/smart-ui-action/ui-action.service.mjs +1 -2
  23. package/esm2022/lib/view-context/smart-view-context.module.mjs +18 -3
  24. package/fesm2022/smartbit4all-ng-client.mjs +618 -112
  25. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  26. package/lib/smart-dialog/smartdialog.service.d.ts +1 -1
  27. package/lib/smart-table/smarttable.model.d.ts +5 -7
  28. package/lib/view-context/api/api-default/binaryData.d.ts +2 -0
  29. package/lib/view-context/api/api-default/invocationError.d.ts +2 -0
  30. package/lib/view-context/api/api-default/invocationRequest.d.ts +2 -0
  31. package/lib/view-context/api/model/models.d.ts +2 -0
  32. package/lib/view-context/api/model/smartLinkData.d.ts +5 -0
  33. package/lib/view-context/api/model/smartLinkMigrationStatus.d.ts +39 -0
  34. package/lib/view-context/api/model/uiActionUploadDescriptor.d.ts +2 -0
  35. package/lib/view-context/api/model/uploadWidgetType.d.ts +17 -0
  36. package/lib/view-context/api/model/uploadedFile.d.ts +2 -1
  37. package/lib/view-context/api/model/viewEventHandler.d.ts +2 -1
  38. package/lib/view-context/projects.d.ts +3 -0
  39. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/photo-capture-widget/photo-capture-widget.component.d.ts +28 -0
  40. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/ui-action-file-upload-dialog.component.d.ts +14 -4
  41. package/lib/view-context/smart-ui-action/dialogs/ui-action-file-upload-dialog/voice-record-widget/voice-record-widget.component.d.ts +30 -0
  42. package/lib/view-context/smart-ui-action/ui-action-button/ui-action-button.component.d.ts +43 -0
  43. package/lib/view-context/smart-view-context.module.d.ts +47 -44
  44. package/package.json +3 -2
  45. package/smartbit4all-ng-client-4.2.42.tgz +0 -0
  46. package/smartbit4all-ng-client-4.2.41.tgz +0 -0
@@ -0,0 +1,127 @@
1
+ import { Component, EventEmitter, Inject, Optional, Output, ViewChild, } from '@angular/core';
2
+ import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../../utility/componentLibrary';
3
+ import { UiActionButtonType } from '../../../../api/model/uiActionButtonType';
4
+ import { IconPosition } from '../../../../api/model/iconPosition';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../../../ui-action-button/ui-action-button.component";
8
+ import * as i3 from "../../../../utility/componentLibrary";
9
+ export class PhotoCaptureWidgetComponent {
10
+ constructor(compLib) {
11
+ this.photoCaptured = new EventEmitter();
12
+ this.cameraActive = false;
13
+ this.isCaptured = false;
14
+ this.componentLibrary = ComponentLibrary;
15
+ this.mobileButton = {
16
+ uiAction: {
17
+ descriptor: {
18
+ type: UiActionButtonType.RAISED,
19
+ title: 'Kép készítése',
20
+ icon: 'camera',
21
+ iconPosition: IconPosition.PRE,
22
+ color: 'primary',
23
+ },
24
+ },
25
+ };
26
+ this.startCameraButton = {
27
+ uiAction: {
28
+ descriptor: {
29
+ type: UiActionButtonType.RAISED,
30
+ title: 'Kamera bekapcsolása',
31
+ icon: 'play',
32
+ iconPosition: IconPosition.PRE,
33
+ color: 'primary',
34
+ },
35
+ },
36
+ };
37
+ this.stopCameraButton = {
38
+ uiAction: {
39
+ descriptor: {
40
+ type: UiActionButtonType.RAISED,
41
+ title: 'Kamera kikapcsolása',
42
+ icon: 'stop',
43
+ iconPosition: IconPosition.PRE,
44
+ color: 'primary',
45
+ },
46
+ },
47
+ };
48
+ this.captureButton = {
49
+ uiAction: {
50
+ descriptor: {
51
+ type: UiActionButtonType.RAISED,
52
+ title: 'Kép készítése',
53
+ icon: 'camera',
54
+ iconPosition: IconPosition.PRE,
55
+ color: 'primary',
56
+ },
57
+ },
58
+ };
59
+ this.compLib = compLib ?? ComponentLibrary.PRIMENG;
60
+ }
61
+ isMobile() {
62
+ return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
63
+ }
64
+ async startCamera() {
65
+ this.stream = await navigator.mediaDevices.getUserMedia({ video: true });
66
+ this.videoRef.nativeElement.srcObject = this.stream;
67
+ this.videoRef.nativeElement.play();
68
+ this.cameraActive = true;
69
+ this.isCaptured = false;
70
+ }
71
+ stopCamera() {
72
+ this.stream?.getTracks().forEach((track) => track.stop());
73
+ this.stream = undefined;
74
+ this.cameraActive = false;
75
+ }
76
+ capturePhoto() {
77
+ const video = this.videoRef.nativeElement;
78
+ const canvas = this.canvasRef.nativeElement;
79
+ const context = canvas.getContext('2d');
80
+ if (!context)
81
+ return;
82
+ canvas.width = video.videoWidth;
83
+ canvas.height = video.videoHeight;
84
+ context.drawImage(video, 0, 0);
85
+ canvas.toBlob((blob) => {
86
+ if (blob) {
87
+ const file = new File([blob], `photo_${Date.now()}.png`, { type: 'image/png' });
88
+ this.photoCaptured.emit([file]);
89
+ this.isCaptured = true;
90
+ this.stopCamera();
91
+ }
92
+ }, 'image/png');
93
+ }
94
+ getPhotoDataURL() {
95
+ return this.canvasRef.nativeElement.toDataURL('image/png');
96
+ }
97
+ onFileSelected(event) {
98
+ const input = event.target;
99
+ if (input.files && input.files.length > 0) {
100
+ const filesArray = Array.from(input.files);
101
+ this.photoCaptured.emit(filesArray);
102
+ }
103
+ }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PhotoCaptureWidgetComponent, deps: [{ token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
105
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PhotoCaptureWidgetComponent, selector: "photo-capture-widget", outputs: { photoCaptured: "photoCaptured" }, viewQueries: [{ propertyName: "videoRef", first: true, predicate: ["video"], descendants: true }, { propertyName: "canvasRef", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "fileInputRef", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "<div class=\"photoWidgetContainer\">\r\n <ng-container *ngIf=\"!isMobile()\">\r\n <video #video autoplay [hidden]=\"isCaptured || !cameraActive\"></video>\r\n <canvas #canvas [hidden]=\"!isCaptured || cameraActive\"></canvas>\r\n\r\n <ng-container *ngIf=\"!cameraActive && !isCaptured\">\r\n <p class=\"message\">Kapcsolja be a kamer\u00E1t a k\u00E9p k\u00E9sz\u00EDt\u00E9s\u00E9hez!</p>\r\n </ng-container>\r\n\r\n <div class=\"controls\">\r\n <!-- START CAMERA -->\r\n <ui-action-button\r\n *ngIf=\"!cameraActive\"\r\n [uiActionModel]=\"startCameraButton\"\r\n (actionClick)=\"startCamera()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- STOP CAMERA -->\r\n <ui-action-button\r\n *ngIf=\"cameraActive\"\r\n [uiActionModel]=\"stopCameraButton\"\r\n (actionClick)=\"stopCamera()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- CAPTURE CAMERA -->\r\n <ui-action-button\r\n [disabled]=\"!cameraActive\"\r\n [uiActionModel]=\"captureButton\"\r\n (actionClick)=\"capturePhoto()\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isMobile()\">\r\n <div class=\"controls\">\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n accept=\"image/*\"\r\n capture=\"environment\"\r\n (change)=\"onFileSelected($event)\"\r\n style=\"display: none\"\r\n />\r\n\r\n <ui-action-button [uiActionModel]=\"mobileButton\" (actionClick)=\"fileInput.click()\">\r\n </ui-action-button>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".photoWidgetContainer{border-radius:5px;width:100%;max-width:100%;display:flex;flex-direction:column;justify-content:center;border:1px solid #dee2e6}.message{text-align:center;color:#6b7280}video,canvas{border-top-right-radius:5px;border-top-left-radius:5px;width:100%}.controls{padding:.5rem;display:flex;gap:1rem;flex-direction:row;justify-content:center;background:#f8f9fa;border-top:1px solid #dee2e6;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.controls ::ng-deep button{border-radius:3px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UiActionButtonComponent, selector: "ui-action-button", inputs: ["uiActionModel", "uiActionDescriptorService", "disabled"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
106
+ }
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PhotoCaptureWidgetComponent, decorators: [{
108
+ type: Component,
109
+ args: [{ selector: 'photo-capture-widget', template: "<div class=\"photoWidgetContainer\">\r\n <ng-container *ngIf=\"!isMobile()\">\r\n <video #video autoplay [hidden]=\"isCaptured || !cameraActive\"></video>\r\n <canvas #canvas [hidden]=\"!isCaptured || cameraActive\"></canvas>\r\n\r\n <ng-container *ngIf=\"!cameraActive && !isCaptured\">\r\n <p class=\"message\">Kapcsolja be a kamer\u00E1t a k\u00E9p k\u00E9sz\u00EDt\u00E9s\u00E9hez!</p>\r\n </ng-container>\r\n\r\n <div class=\"controls\">\r\n <!-- START CAMERA -->\r\n <ui-action-button\r\n *ngIf=\"!cameraActive\"\r\n [uiActionModel]=\"startCameraButton\"\r\n (actionClick)=\"startCamera()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- STOP CAMERA -->\r\n <ui-action-button\r\n *ngIf=\"cameraActive\"\r\n [uiActionModel]=\"stopCameraButton\"\r\n (actionClick)=\"stopCamera()\"\r\n >\r\n </ui-action-button>\r\n\r\n <!-- CAPTURE CAMERA -->\r\n <ui-action-button\r\n [disabled]=\"!cameraActive\"\r\n [uiActionModel]=\"captureButton\"\r\n (actionClick)=\"capturePhoto()\"\r\n >\r\n </ui-action-button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"isMobile()\">\r\n <div class=\"controls\">\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n accept=\"image/*\"\r\n capture=\"environment\"\r\n (change)=\"onFileSelected($event)\"\r\n style=\"display: none\"\r\n />\r\n\r\n <ui-action-button [uiActionModel]=\"mobileButton\" (actionClick)=\"fileInput.click()\">\r\n </ui-action-button>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".photoWidgetContainer{border-radius:5px;width:100%;max-width:100%;display:flex;flex-direction:column;justify-content:center;border:1px solid #dee2e6}.message{text-align:center;color:#6b7280}video,canvas{border-top-right-radius:5px;border-top-left-radius:5px;width:100%}.controls{padding:.5rem;display:flex;gap:1rem;flex-direction:row;justify-content:center;background:#f8f9fa;border-top:1px solid #dee2e6;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.controls ::ng-deep button{border-radius:3px}\n"] }]
110
+ }], ctorParameters: () => [{ type: i3.ComponentLibrary, decorators: [{
111
+ type: Inject,
112
+ args: [COMPONENT_LIBRARY]
113
+ }, {
114
+ type: Optional
115
+ }] }], propDecorators: { videoRef: [{
116
+ type: ViewChild,
117
+ args: ['video']
118
+ }], canvasRef: [{
119
+ type: ViewChild,
120
+ args: ['canvas']
121
+ }], fileInputRef: [{
122
+ type: ViewChild,
123
+ args: ['fileInput']
124
+ }], photoCaptured: [{
125
+ type: Output
126
+ }] } });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tY2FwdHVyZS13aWRnZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9kaWFsb2dzL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cvcGhvdG8tY2FwdHVyZS13aWRnZXQvcGhvdG8tY2FwdHVyZS13aWRnZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvdmlldy1jb250ZXh0L3NtYXJ0LXVpLWFjdGlvbi9kaWFsb2dzL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cvcGhvdG8tY2FwdHVyZS13aWRnZXQvcGhvdG8tY2FwdHVyZS13aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFPbEUsTUFBTSxPQUFPLDJCQUEyQjtJQTREdEMsWUFBbUQsT0FBMEI7UUF2RG5FLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVyRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBS25CLHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXBDLGlCQUFZLEdBQWtCO1lBQzVC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QTNCLFNBQVM7dUJBQUMsT0FBTztnQkFDRyxTQUFTO3NCQUE3QixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0ssWUFBWTtzQkFBbkMsU0FBUzt1QkFBQyxXQUFXO2dCQUVaLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXR5L2NvbXBvbmVudExpYnJhcnknO1xyXG5pbXBvcnQgeyBVaUFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vdWktYWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVWlBY3Rpb25CdXR0b25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXBpL21vZGVsL3VpQWN0aW9uQnV0dG9uVHlwZSc7XHJcbmltcG9ydCB7IEljb25Qb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS9tb2RlbC9pY29uUG9zaXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdwaG90by1jYXB0dXJlLXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Bob3RvLWNhcHR1cmUtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcGhvdG8tY2FwdHVyZS13aWRnZXQuY29tcG9uZW50LmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaG90b0NhcHR1cmVXaWRnZXRDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ3ZpZGVvJykgdmlkZW9SZWYhOiBFbGVtZW50UmVmPEhUTUxWaWRlb0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dFJlZiE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIEBPdXRwdXQoKSBwaG90b0NhcHR1cmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlW10+KCk7XHJcblxyXG4gIGNhbWVyYUFjdGl2ZSA9IGZhbHNlO1xyXG4gIGlzQ2FwdHVyZWQgPSBmYWxzZTtcclxuXHJcbiAgc3RyZWFtPzogTWVkaWFTdHJlYW07XHJcblxyXG4gIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnk7XHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcblxyXG4gIG1vYmlsZUJ1dHRvbjogVWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgIHVpQWN0aW9uOiB7XHJcbiAgICAgIGRlc2NyaXB0b3I6IHtcclxuICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgIHRpdGxlOiAnS8OpcCBrw6lzesOtdMOpc2UnLFxyXG4gICAgICAgIGljb246ICdjYW1lcmEnLFxyXG4gICAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9IGFzIFVpQWN0aW9uTW9kZWw7XHJcbiAgc3RhcnRDYW1lcmFCdXR0b246IFVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICB1aUFjdGlvbjoge1xyXG4gICAgICBkZXNjcmlwdG9yOiB7XHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLlJBSVNFRCxcclxuICAgICAgICB0aXRsZTogJ0thbWVyYSBiZWthcGNzb2zDoXNhJyxcclxuICAgICAgICBpY29uOiAncGxheScsXHJcbiAgICAgICAgaWNvblBvc2l0aW9uOiBJY29uUG9zaXRpb24uUFJFLFxyXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0gYXMgVWlBY3Rpb25Nb2RlbDtcclxuICBzdG9wQ2FtZXJhQnV0dG9uOiBVaUFjdGlvbk1vZGVsID0ge1xyXG4gICAgdWlBY3Rpb246IHtcclxuICAgICAgZGVzY3JpcHRvcjoge1xyXG4gICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgICAgdGl0bGU6ICdLYW1lcmEga2lrYXBjc29sw6FzYScsXHJcbiAgICAgICAgaWNvbjogJ3N0b3AnLFxyXG4gICAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9IGFzIFVpQWN0aW9uTW9kZWw7XHJcbiAgY2FwdHVyZUJ1dHRvbjogVWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgIHVpQWN0aW9uOiB7XHJcbiAgICAgIGRlc2NyaXB0b3I6IHtcclxuICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgIHRpdGxlOiAnS8OpcCBrw6lzesOtdMOpc2UnLFxyXG4gICAgICAgIGljb246ICdjYW1lcmEnLFxyXG4gICAgICAgIGljb25Qb3NpdGlvbjogSWNvblBvc2l0aW9uLlBSRSxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICB9IGFzIFVpQWN0aW9uTW9kZWw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09NUE9ORU5UX0xJQlJBUlkpIEBPcHRpb25hbCgpIGNvbXBMaWI/OiBDb21wb25lbnRMaWJyYXJ5KSB7XHJcbiAgICB0aGlzLmNvbXBMaWIgPSBjb21wTGliID8/IENvbXBvbmVudExpYnJhcnkuUFJJTUVORztcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnRDYW1lcmEoKSB7XHJcbiAgICB0aGlzLnN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgdmlkZW86IHRydWUgfSk7XHJcbiAgICB0aGlzLnZpZGVvUmVmLm5hdGl2ZUVsZW1lbnQuc3JjT2JqZWN0ID0gdGhpcy5zdHJlYW07XHJcbiAgICB0aGlzLnZpZGVvUmVmLm5hdGl2ZUVsZW1lbnQucGxheSgpO1xyXG4gICAgdGhpcy5jYW1lcmFBY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0NhcHR1cmVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdG9wQ2FtZXJhKCkge1xyXG4gICAgdGhpcy5zdHJlYW0/LmdldFRyYWNrcygpLmZvckVhY2goKHRyYWNrKSA9PiB0cmFjay5zdG9wKCkpO1xyXG4gICAgdGhpcy5zdHJlYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNhbWVyYUFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2FwdHVyZVBob3RvKCkge1xyXG4gICAgY29uc3QgdmlkZW8gPSB0aGlzLnZpZGVvUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgaWYgKCFjb250ZXh0KSByZXR1cm47XHJcblxyXG4gICAgY2FudmFzLndpZHRoID0gdmlkZW8udmlkZW9XaWR0aDtcclxuICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDtcclxuICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCAwLCAwKTtcclxuXHJcbiAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgIGlmIChibG9iKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgYHBob3RvXyR7RGF0ZS5ub3coKX0ucG5nYCwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KTtcclxuICAgICAgICB0aGlzLnBob3RvQ2FwdHVyZWQuZW1pdChbZmlsZV0pO1xyXG4gICAgICAgIHRoaXMuaXNDYXB0dXJlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuc3RvcENhbWVyYSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAnaW1hZ2UvcG5nJyk7XHJcbiAgfVxyXG5cclxuICBnZXRQaG90b0RhdGFVUkwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgfVxyXG5cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBmaWxlc0FycmF5ID0gQXJyYXkuZnJvbShpbnB1dC5maWxlcyk7XHJcbiAgICAgIHRoaXMucGhvdG9DYXB0dXJlZC5lbWl0KGZpbGVzQXJyYXkpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGhvdG9XaWRnZXRDb250YWluZXJcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTW9iaWxlKClcIj5cclxuICAgIDx2aWRlbyAjdmlkZW8gYXV0b3BsYXkgW2hpZGRlbl09XCJpc0NhcHR1cmVkIHx8ICFjYW1lcmFBY3RpdmVcIj48L3ZpZGVvPlxyXG4gICAgPGNhbnZhcyAjY2FudmFzIFtoaWRkZW5dPVwiIWlzQ2FwdHVyZWQgfHwgY2FtZXJhQWN0aXZlXCI+PC9jYW52YXM+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYW1lcmFBY3RpdmUgJiYgIWlzQ2FwdHVyZWRcIj5cclxuICAgICAgPHAgY2xhc3M9XCJtZXNzYWdlXCI+S2FwY3NvbGphIGJlIGEga2FtZXLDoXQgYSBrw6lwIGvDqXN6w610w6lzw6loZXohPC9wPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XHJcbiAgICAgIDwhLS0gU1RBUlQgQ0FNRVJBIC0tPlxyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIWNhbWVyYUFjdGl2ZVwiXHJcbiAgICAgICAgW3VpQWN0aW9uTW9kZWxdPVwic3RhcnRDYW1lcmFCdXR0b25cIlxyXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJzdGFydENhbWVyYSgpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgICA8IS0tIFNUT1AgQ0FNRVJBIC0tPlxyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiY2FtZXJhQWN0aXZlXCJcclxuICAgICAgICBbdWlBY3Rpb25Nb2RlbF09XCJzdG9wQ2FtZXJhQnV0dG9uXCJcclxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwic3RvcENhbWVyYSgpXCJcclxuICAgICAgPlxyXG4gICAgICA8L3VpLWFjdGlvbi1idXR0b24+XHJcblxyXG4gICAgICA8IS0tIENBUFRVUkUgQ0FNRVJBIC0tPlxyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvblxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY2FtZXJhQWN0aXZlXCJcclxuICAgICAgICBbdWlBY3Rpb25Nb2RlbF09XCJjYXB0dXJlQnV0dG9uXCJcclxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwiY2FwdHVyZVBob3RvKClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvdWktYWN0aW9uLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNNb2JpbGUoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNmaWxlSW5wdXRcclxuICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXHJcbiAgICAgICAgY2FwdHVyZT1cImVudmlyb25tZW50XCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8dWktYWN0aW9uLWJ1dHRvbiBbdWlBY3Rpb25Nb2RlbF09XCJtb2JpbGVCdXR0b25cIiAoYWN0aW9uQ2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgPC91aS1hY3Rpb24tYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,21 +1,27 @@
1
- import { Component, Inject } from '@angular/core';
1
+ import { Component, Inject, ViewChild } from '@angular/core';
2
+ import { UploadWidgetType } from '../../../api';
2
3
  import { COMPONENT_LIBRARY, ComponentLibrary } from '../../../projects';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../ui-action.descriptor.service";
5
- import * as i2 from "@angular/material/button";
6
- import * as i3 from "primeng/button";
7
- import * as i4 from "primeng/api";
8
- import * as i5 from "../../../../smart-icon/smart-icon/smart-icon.component";
9
- import * as i6 from "primeng/fileupload";
10
- import * as i7 from "../../../../smart-form/smartfileuploader/smartfileuploader.component";
11
- import * as i8 from "./ui-action-file-upload-dialog.service";
12
- import * as i9 from "../../../projects";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/material/button";
8
+ import * as i4 from "primeng/button";
9
+ import * as i5 from "primeng/api";
10
+ import * as i6 from "../../../../smart-icon/smart-icon/smart-icon.component";
11
+ import * as i7 from "primeng/fileupload";
12
+ import * as i8 from "../../../../smart-form/smartfileuploader/smartfileuploader.component";
13
+ import * as i9 from "./voice-record-widget/voice-record-widget.component";
14
+ import * as i10 from "./photo-capture-widget/photo-capture-widget.component";
15
+ import * as i11 from "./ui-action-file-upload-dialog.service";
16
+ import * as i12 from "../../../projects";
13
17
  export class UiActionFileUploadDialogComponent {
14
- constructor(service, compLib, manager) {
18
+ constructor(service, compLib, manager, cdr) {
15
19
  this.service = service;
16
20
  this.compLib = compLib;
17
21
  this.manager = manager;
22
+ this.cdr = cdr;
18
23
  this.componentLibrary = ComponentLibrary;
24
+ this.uploadWidgetType = UploadWidgetType;
19
25
  this.maxSizeMb = 25;
20
26
  this.uploadedFiles = [];
21
27
  this.code = this.service.action.code;
@@ -44,24 +50,43 @@ export class UiActionFileUploadDialogComponent {
44
50
  else {
45
51
  this.dialogType = this.descriptor.inputDialog ? 'inputDialog' : 'dialog';
46
52
  }
53
+ this.cdr.detectChanges();
47
54
  }
48
55
  getTitle() {
49
- return this.descriptor[this.dialogType].title;
56
+ if (this.descriptor) {
57
+ return this.descriptor[this.dialogType]?.title ?? 'Fájl hozzáadása';
58
+ }
59
+ return '';
50
60
  }
51
61
  getText() {
52
- return this.descriptor[this.dialogType].text ?? '';
62
+ if (this.descriptor) {
63
+ return this.descriptor[this.dialogType]?.text ?? '';
64
+ }
65
+ return '';
53
66
  }
54
67
  getActionButtonLabel() {
55
- return this.descriptor[this.dialogType].actionButton.caption;
68
+ if (this.descriptor) {
69
+ return this.descriptor[this.dialogType]?.actionButton.caption ?? '';
70
+ }
71
+ return '';
56
72
  }
57
73
  getActionButtonColor() {
58
- return this.descriptor[this.dialogType].actionButton.color;
74
+ if (this.descriptor) {
75
+ return this.descriptor[this.dialogType]?.actionButton.color ?? '';
76
+ }
77
+ return '';
59
78
  }
60
79
  getCancelButtonLabel() {
61
- return this.descriptor[this.dialogType].cancelButton.caption;
80
+ if (this.descriptor) {
81
+ return this.descriptor[this.dialogType]?.cancelButton.caption ?? '';
82
+ }
83
+ return '';
62
84
  }
63
85
  getCancelButtonColor() {
64
- return this.descriptor[this.dialogType].cancelButton.color;
86
+ if (this.descriptor) {
87
+ return this.descriptor[this.dialogType]?.cancelButton.color ?? '';
88
+ }
89
+ return '';
65
90
  }
66
91
  upload(files) {
67
92
  this.service.onSave(files);
@@ -81,17 +106,51 @@ export class UiActionFileUploadDialogComponent {
81
106
  cancel() {
82
107
  this.service.cancel();
83
108
  }
84
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionFileUploadDialogComponent, deps: [{ token: 'fileUploadDialogService' }, { token: COMPONENT_LIBRARY }, { token: i1.UiActionDescriptorService }], target: i0.ɵɵFactoryTarget.Component }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionFileUploadDialogComponent, selector: "lib-ui-action-file-upload-dialog", ngImport: i0, template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n\r\n <p-fileUpload\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSend)=\"uploadFiles($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"this.descriptor?.upload?.formats ?? ''\"\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\"> </ng-template>\r\n </p-fileUpload>\r\n }@else{\r\n <smartfileuploader\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n ></smartfileuploader>\r\n\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <button mat-button color=\"accent\" [color]=\"getCancelButtonColor()\" (click)=\"cancel()\">\r\n {{ getCancelButtonLabel() }}\r\n </button>\r\n <!-- <button mat-raised-button [color]=\"getActionButtonColor()\" (click)=\"upload()\">\r\n {{ getActionButtonLabel() }}\r\n </button> -->\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{width:25rem;display:flex;flex-direction:column;gap:1rem}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i6.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i7.SmartfileuploaderComponent, selector: "smartfileuploader", inputs: ["uploadCallback", "fileFormats", "maxSizeMb", "i18n", "useIconButton", "isMultiple"] }] }); }
109
+ uploadRecording(file) {
110
+ this.loadFilesIntoWidget([file]);
111
+ }
112
+ uploadImage(files) {
113
+ this.loadFilesIntoWidget(files);
114
+ }
115
+ loadFilesIntoWidget(files) {
116
+ if (ComponentLibrary.PRIMENG === this.compLib) {
117
+ const dataTransfer = new DataTransfer();
118
+ for (const file of files) {
119
+ dataTransfer.items.add(file);
120
+ }
121
+ const fileList = dataTransfer.files;
122
+ const fakeEvent = {
123
+ target: {
124
+ files: fileList,
125
+ },
126
+ type: 'change',
127
+ };
128
+ this.fileUploadPrime.onFileSelect(fakeEvent);
129
+ }
130
+ else {
131
+ this.fileUploadMaterial.files.push(...files);
132
+ }
133
+ }
134
+ getContainsFiles() {
135
+ return this.uploadedFiles.length > 0;
136
+ }
137
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionFileUploadDialogComponent, deps: [{ token: 'fileUploadDialogService' }, { token: COMPONENT_LIBRARY }, { token: i1.UiActionDescriptorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionFileUploadDialogComponent, selector: "lib-ui-action-file-upload-dialog", viewQueries: [{ propertyName: "fileUploadPrime", first: true, predicate: ["fileUploadPrimeNg"], descendants: true }, { propertyName: "fileUploadMaterial", first: true, predicate: ["fileUploadMaterial"], descendants: true }], ngImport: i0, template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n\r\n <!-- IMAGE TYPE -->\r\n <ng-container\r\n *ngIf=\"\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.IMAGE ||\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.ALL\r\n \"\r\n >\r\n <photo-capture-widget (photoCaptured)=\"uploadImage($event)\"> </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE -->\r\n <ng-container\r\n *ngIf=\"\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.SOUND ||\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.ALL\r\n \"\r\n >\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSend)=\"uploadFiles($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"this.descriptor?.upload?.formats ?? ''\"\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"uploadField\" [hidden]=\"getContainsFiles()\">\r\n <smart-icon [icon]=\"'upload'\"></smart-icon>\r\n <span class=\"message\">H\u00FAzza ide a f\u00E1jlokat.</span>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n\r\n }@else{\r\n\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n ></smartfileuploader>\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <p-button\r\n class=\"p-button-text\"\r\n (click)=\"cancel()\"\r\n type=\"button\"\r\n [label]=\"getCancelButtonLabel()\"\r\n [icon]=\"'pi pi-times'\"\r\n ></p-button>\r\n }@else{\r\n <button mat-button color=\"accent\" [color]=\"getCancelButtonColor()\" (click)=\"cancel()\">\r\n {{ getCancelButtonLabel() }}\r\n </button>\r\n <!-- <button mat-raised-button [color]=\"getActionButtonColor()\" (click)=\"upload()\">\r\n {{ getActionButtonLabel() }}\r\n </button> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{display:flex;flex-direction:column;justify-content:center;gap:1rem;min-width:30vw}photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;min-height:5vh;align-content:center;text-align:center}.message{text-align:center;color:#6b7280}.uploadField{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1rem}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i8.SmartfileuploaderComponent, selector: "smartfileuploader", inputs: ["uploadCallback", "fileFormats", "maxSizeMb", "i18n", "useIconButton", "isMultiple"] }, { kind: "component", type: i9.VoiceRecordWidgetComponent, selector: "voice-record-widget", inputs: ["color", "iconColor"], outputs: ["recordingSaved"] }, { kind: "component", type: i10.PhotoCaptureWidgetComponent, selector: "photo-capture-widget", outputs: ["photoCaptured"] }] }); }
86
139
  }
87
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionFileUploadDialogComponent, decorators: [{
88
141
  type: Component,
89
- args: [{ selector: 'lib-ui-action-file-upload-dialog', template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n\r\n <p-fileUpload\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSend)=\"uploadFiles($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"this.descriptor?.upload?.formats ?? ''\"\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\"> </ng-template>\r\n </p-fileUpload>\r\n }@else{\r\n <smartfileuploader\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n ></smartfileuploader>\r\n\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n <button mat-button color=\"accent\" [color]=\"getCancelButtonColor()\" (click)=\"cancel()\">\r\n {{ getCancelButtonLabel() }}\r\n </button>\r\n <!-- <button mat-raised-button [color]=\"getActionButtonColor()\" (click)=\"upload()\">\r\n {{ getActionButtonLabel() }}\r\n </button> -->\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{width:25rem;display:flex;flex-direction:column;gap:1rem}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important}\n"] }]
90
- }], ctorParameters: () => [{ type: i8.UiActionFileUploadDialogService, decorators: [{
142
+ args: [{ selector: 'lib-ui-action-file-upload-dialog', template: "<div class=\"folderNameDialogContainer\">\r\n <div class=\"headerContainer\">\r\n <h3 class=\"color-accent-700\">\r\n {{ getTitle() }}\r\n </h3>\r\n @if(compLib === componentLibrary.MATERIAL) {\r\n <button mat-icon-button (click)=\"cancel()\">\r\n <smart-icon [color]=\"'primary'\" [icon]=\"'X'\"></smart-icon>\r\n </button>\r\n }@else {\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" [text]=\"true\" (click)=\"cancel()\" />\r\n }\r\n </div>\r\n <p>\r\n {{ getText() }}\r\n </p>\r\n\r\n <!-- IMAGE TYPE -->\r\n <ng-container\r\n *ngIf=\"\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.IMAGE ||\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.ALL\r\n \"\r\n >\r\n <photo-capture-widget (photoCaptured)=\"uploadImage($event)\"> </photo-capture-widget>\r\n </ng-container>\r\n\r\n <!-- SOUND TYPE -->\r\n <ng-container\r\n *ngIf=\"\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.SOUND ||\r\n this.descriptor?.upload?.uploadWidgetType == uploadWidgetType.ALL\r\n \"\r\n >\r\n <voice-record-widget (recordingSaved)=\"uploadRecording($event)\"> </voice-record-widget>\r\n </ng-container>\r\n\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n\r\n <p-fileUpload\r\n #fileUploadPrimeNg\r\n name=\"files[]\"\r\n url=\"\"\r\n (onSend)=\"uploadFiles($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onRemove)=\"onRemove($event)\"\r\n [multiple]=\"isMultiple\"\r\n [accept]=\"this.descriptor?.upload?.formats ?? ''\"\r\n [maxFileSize]=\"maxSizeMb * 1024 * 1024\"\r\n uploadLabel=\"Felt\u00F6lt\u00E9s\"\r\n cancelLabel=\"M\u00E9gsem\"\r\n chooseLabel=\"V\u00E1laszt\u00E1s\"\r\n >\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"uploadField\" [hidden]=\"getContainsFiles()\">\r\n <smart-icon [icon]=\"'upload'\"></smart-icon>\r\n <span class=\"message\">H\u00FAzza ide a f\u00E1jlokat.</span>\r\n </div>\r\n </ng-template>\r\n </p-fileUpload>\r\n\r\n }@else{\r\n\r\n <smartfileuploader\r\n #fileUploadMaterial\r\n [i18n]=\"i18n\"\r\n [fileFormats]=\"fileFormats\"\r\n [maxSizeMb]=\"maxSizeMb\"\r\n [uploadCallback]=\"upload.bind(this)\"\r\n [isMultiple]=\"isMultiple\"\r\n ></smartfileuploader>\r\n }\r\n\r\n <div class=\"folderNameDialogButtonsContainer\">\r\n @if(compLib === componentLibrary.PRIMENG) {\r\n <p-button\r\n class=\"p-button-text\"\r\n (click)=\"cancel()\"\r\n type=\"button\"\r\n [label]=\"getCancelButtonLabel()\"\r\n [icon]=\"'pi pi-times'\"\r\n ></p-button>\r\n }@else{\r\n <button mat-button color=\"accent\" [color]=\"getCancelButtonColor()\" (click)=\"cancel()\">\r\n {{ getCancelButtonLabel() }}\r\n </button>\r\n <!-- <button mat-raised-button [color]=\"getActionButtonColor()\" (click)=\"upload()\">\r\n {{ getActionButtonLabel() }}\r\n </button> -->\r\n }\r\n </div>\r\n</div>\r\n", styles: [".folderNameDialogContainer{display:flex;flex-direction:column;justify-content:center;gap:1rem;min-width:30vw}photo-capture-widget{width:100%;max-width:100%;overflow:hidden;display:flex;flex-direction:column;align-items:center}.headerContainer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-top:1rem}.headerContainer h3{margin:0}.folderNameDialogButtonsContainer{display:flex;flex-direction:row;justify-content:flex-end;gap:.5rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-buttonbar{display:flex!important;flex-direction:row;justify-content:center;flex-wrap:wrap;gap:1rem}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-row>div{width:fit-content}.folderNameDialogContainer ::ng-deep .p-fileupload .p-fileupload-content{padding:unset;min-height:5vh;align-content:center;text-align:center}.message{text-align:center;color:#6b7280}.uploadField{display:flex;flex-direction:row;justify-content:center;align-items:center;gap:1rem}\n"] }]
143
+ }], ctorParameters: () => [{ type: i11.UiActionFileUploadDialogService, decorators: [{
91
144
  type: Inject,
92
145
  args: ['fileUploadDialogService']
93
- }] }, { type: i9.ComponentLibrary, decorators: [{
146
+ }] }, { type: i12.ComponentLibrary, decorators: [{
94
147
  type: Inject,
95
148
  args: [COMPONENT_LIBRARY]
96
- }] }, { type: i1.UiActionDescriptorService }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2RpYWxvZ3MvdWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vZGlhbG9ncy91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFLN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7O0FBT3hFLE1BQU0sT0FBTyxpQ0FBaUM7SUFZNUMsWUFDNkMsT0FBd0MsRUFDakQsT0FBeUIsRUFDbkQsT0FBa0M7UUFGQyxZQUFPLEdBQVAsT0FBTyxDQUFpQztRQUNqRCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUNuRCxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQVQ1QyxxQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyxjQUFTLEdBQVcsRUFBRSxDQUFDO1FBOER2QixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQXJEeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2Ys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Q0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7K0dBeEZVLGlDQUFpQyxrQkFhbEMseUJBQXlCLGFBQ3pCLGlCQUFpQjttR0FkaEIsaUNBQWlDLHdFQ1o5QyxvdERBcURBOzs0RkR6Q2EsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGtDQUFrQzs7MEJBaUJ6QyxNQUFNOzJCQUFDLHlCQUF5Qjs7MEJBQ2hDLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkRlc2NyaXB0b3IgfSBmcm9tICcuLi8uLi8uLi9hcGknO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdWktYWN0aW9uLmRlc2NyaXB0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsZVVwbG9hZGVySTE4biB9IGZyb20gJy4uLy4uLy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmaWxldXBsb2FkZXIvc21hcnRmaWxldXBsb2FkZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBDT01QT05FTlRfTElCUkFSWSwgQ29tcG9uZW50TGlicmFyeSB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgY29kZSE6IHN0cmluZztcclxuXHJcbiAgZGlhbG9nVHlwZSE6ICdkaWFsb2cnIHwgJ2lucHV0RGlhbG9nJyB8ICdpbnB1dDJEaWFsb2cnO1xyXG5cclxuICBkZXNjcmlwdG9yPzogVWlBY3Rpb25EZXNjcmlwdG9yO1xyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIGkxOG4/OiBTbWFydEZpbGVVcGxvYWRlckkxOG47XHJcbiAgbWF4U2l6ZU1iOiBudW1iZXIgPSAyNTtcclxuICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdO1xyXG4gIGlzTXVsdGlwbGU/OiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2ZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlJykgcHJpdmF0ZSBzZXJ2aWNlOiBVaUFjdGlvbkZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgcHVibGljIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnksXHJcbiAgICBwcml2YXRlIG1hbmFnZXI6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY29kZSA9IHRoaXMuc2VydmljZS5hY3Rpb24uY29kZSE7XHJcbiAgICB0aGlzLnNldFVwKCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXJ2aWNlLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmNhbmNlbCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2V0VXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRlc2NyaXB0b3IgPSBhd2FpdCB0aGlzLm1hbmFnZXIuZ2V0QWN0aW9uRGVzY3JpcHRvcih0aGlzLnNlcnZpY2UuYWN0aW9uKTtcclxuXHJcbiAgICB0aGlzLmlzTXVsdGlwbGUgPSB0aGlzLnNlcnZpY2UuaXNNdWx0aXBsZTtcclxuICAgIHRoaXMubWF4U2l6ZU1iID0gTnVtYmVyKHRoaXMuZGVzY3JpcHRvci51cGxvYWQ/Lm1heFNpemUpO1xyXG4gICAgLy8gZmlsZUZvcm1hdHMgPSB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy5mb3JtYXRzO1xyXG4gICAgdGhpcy5pMThuID0ge1xyXG4gICAgICBhZGRGaWxlOiB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy50aXRsZSA/PyAnZG9rdW1lbnR1bSBob3p6w6FhZMOhc2EnLFxyXG4gICAgICBicm93c2VPckRyYWc6IHRoaXMuZGVzY3JpcHRvci51cGxvYWQ/LmRlc2NyaXB0aW9uID8/ICd0YWxsw7N6w6FzIHZhZ3kgYmVow7p6w6FzJyxcclxuICAgICAgZm9ybWF0czogdGhpcy5kZXNjcmlwdG9yLnVwbG9hZD8uZm9ybWF0cyA/PyAnJyxcclxuICAgICAgbWF4U2l6ZTogdGhpcy5kZXNjcmlwdG9yLnVwbG9hZD8ubWF4U2l6ZSA/PyAnJyxcclxuICAgICAgdXBsb2FkOiB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy51cGxvYWRCdXR0b25UaXRsZSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gVE9ETyBzZXQgbWF4IHNpemUgYW5kIGZpbGUgZm9ybWF0cyBieSBVaUFjdGlvbi5wYXJhbXNcclxuXHJcbiAgICBpZiAodGhpcy5kZXNjcmlwdG9yW3RoaXMuc2VydmljZS5pbnB1dFR5cGVOYW1lXSkge1xyXG4gICAgICB0aGlzLmRpYWxvZ1R5cGUgPSB0aGlzLnNlcnZpY2UuaW5wdXRUeXBlTmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nVHlwZSA9IHRoaXMuZGVzY3JpcHRvci5pbnB1dERpYWxvZyA/ICdpbnB1dERpYWxvZycgOiAnZGlhbG9nJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yIVt0aGlzLmRpYWxvZ1R5cGVdIS50aXRsZTtcclxuICB9XHJcbiAgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvciFbdGhpcy5kaWFsb2dUeXBlXSEudGV4dCA/PyAnJztcclxuICB9XHJcbiAgZ2V0QWN0aW9uQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRlc2NyaXB0b3IhW3RoaXMuZGlhbG9nVHlwZV0hLmFjdGlvbkJ1dHRvbi5jYXB0aW9uO1xyXG4gIH1cclxuICBnZXRBY3Rpb25CdXR0b25Db2xvcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvciFbdGhpcy5kaWFsb2dUeXBlXSEuYWN0aW9uQnV0dG9uLmNvbG9yO1xyXG4gIH1cclxuICBnZXRDYW5jZWxCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvciFbdGhpcy5kaWFsb2dUeXBlXSEuY2FuY2VsQnV0dG9uLmNhcHRpb247XHJcbiAgfVxyXG4gIGdldENhbmNlbEJ1dHRvbkNvbG9yKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yIVt0aGlzLmRpYWxvZ1R5cGVdIS5jYW5jZWxCdXR0b24uY29sb3I7XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZmlsZXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2Uub25TYXZlKGZpbGVzKTtcclxuICB9XHJcbiAgdXBsb2FkZWRGaWxlczogYW55W10gPSBbXTtcclxuICBvblNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgIGZvciAobGV0IGZpbGUgb2YgZXZlbnQuZmlsZXMpIHtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEZpbGVzKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VydmljZS5vblNhdmUodGhpcy51cGxvYWRlZEZpbGVzKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VydmljZS5jYW5jZWwoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZvbGRlck5hbWVEaWFsb2dDb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyQ29udGFpbmVyXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJjb2xvci1hY2NlbnQtNzAwXCI+XHJcbiAgICAgIHt7IGdldFRpdGxlKCkgfX1cclxuICAgIDwvaDM+XHJcbiAgICBAaWYoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5NQVRFUklBTCkge1xyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIDxzbWFydC1pY29uIFtjb2xvcl09XCIncHJpbWFyeSdcIiBbaWNvbl09XCInWCdcIj48L3NtYXJ0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1AZWxzZSB7XHJcbiAgICA8cC1idXR0b24gaWNvbj1cInBpIHBpLXRpbWVzXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIFt0ZXh0XT1cInRydWVcIiAoY2xpY2spPVwiY2FuY2VsKClcIiAvPlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxwPlxyXG4gICAge3sgZ2V0VGV4dCgpIH19XHJcbiAgPC9wPlxyXG4gIEBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuXHJcbiAgPHAtZmlsZVVwbG9hZFxyXG4gICAgbmFtZT1cImZpbGVzW11cIlxyXG4gICAgdXJsPVwiXCJcclxuICAgIChvblNlbmQpPVwidXBsb2FkRmlsZXMoJGV2ZW50KVwiXHJcbiAgICAob25TZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25SZW1vdmUpPVwib25SZW1vdmUoJGV2ZW50KVwiXHJcbiAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXHJcbiAgICBbYWNjZXB0XT1cInRoaXMuZGVzY3JpcHRvcj8udXBsb2FkPy5mb3JtYXRzID8/ICcnXCJcclxuICAgIFttYXhGaWxlU2l6ZV09XCJtYXhTaXplTWIgKiAxMDI0ICogMTAyNFwiXHJcbiAgICB1cGxvYWRMYWJlbD1cIkZlbHTDtmx0w6lzXCJcclxuICAgIGNhbmNlbExhYmVsPVwiTcOpZ3NlbVwiXHJcbiAgICBjaG9vc2VMYWJlbD1cIlbDoWxhc3p0w6FzXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGVudFwiPiA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC1maWxlVXBsb2FkPlxyXG4gIH1AZWxzZXtcclxuICA8c21hcnRmaWxldXBsb2FkZXJcclxuICAgIFtpMThuXT1cImkxOG5cIlxyXG4gICAgW2ZpbGVGb3JtYXRzXT1cImZpbGVGb3JtYXRzXCJcclxuICAgIFttYXhTaXplTWJdPVwibWF4U2l6ZU1iXCJcclxuICAgIFt1cGxvYWRDYWxsYmFja109XCJ1cGxvYWQuYmluZCh0aGlzKVwiXHJcbiAgICBbaXNNdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICA+PC9zbWFydGZpbGV1cGxvYWRlcj5cclxuXHJcbiAgfVxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9sZGVyTmFtZURpYWxvZ0J1dHRvbnNDb250YWluZXJcIj5cclxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIFtjb2xvcl09XCJnZXRDYW5jZWxCdXR0b25Db2xvcigpXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIHt7IGdldENhbmNlbEJ1dHRvbkxhYmVsKCkgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPCEtLSA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIFtjb2xvcl09XCJnZXRBY3Rpb25CdXR0b25Db2xvcigpXCIgKGNsaWNrKT1cInVwbG9hZCgpXCI+XHJcbiAgICAgIHt7IGdldEFjdGlvbkJ1dHRvbkxhYmVsKCkgfX1cclxuICAgIDwvYnV0dG9uPiAtLT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
149
+ }] }, { type: i1.UiActionDescriptorService }, { type: i0.ChangeDetectorRef }], propDecorators: { fileUploadPrime: [{
150
+ type: ViewChild,
151
+ args: ['fileUploadPrimeNg']
152
+ }], fileUploadMaterial: [{
153
+ type: ViewChild,
154
+ args: ['fileUploadMaterial']
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL2RpYWxvZ3MvdWktYWN0aW9uLWZpbGUtdXBsb2FkLWRpYWxvZy91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3ZpZXctY29udGV4dC9zbWFydC11aS1hY3Rpb24vZGlhbG9ncy91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nL3VpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQXNCLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBSXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVN4RSxNQUFNLE9BQU8saUNBQWlDO0lBa0I1QyxZQUM2QyxPQUF3QyxFQUNqRCxPQUF5QixFQUNuRCxPQUFrQyxFQUNsQyxHQUFzQjtRQUhhLFlBQU8sR0FBUCxPQUFPLENBQWlDO1FBQ2pELFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ25ELFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYmhDLHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXBDLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFJ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Uzt1QkFBQyxtQkFBbUI7Z0JBQ0csa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVWlBY3Rpb25EZXNjcmlwdG9yLCBVcGxvYWRXaWRnZXRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBpJztcclxuaW1wb3J0IHsgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3VpLWFjdGlvbi5kZXNjcmlwdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUFjdGlvbkZpbGVVcGxvYWREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydEZpbGVVcGxvYWRlckkxOG4gfSBmcm9tICcuLi8uLi8uLi8uLi9zbWFydC1mb3JtL3NtYXJ0ZmlsZXVwbG9hZGVyL3NtYXJ0ZmlsZXVwbG9hZGVyLm1vZGVsJztcclxuaW1wb3J0IHsgQ09NUE9ORU5UX0xJQlJBUlksIENvbXBvbmVudExpYnJhcnkgfSBmcm9tICcuLi8uLi8uLi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5pbXBvcnQgeyBTbWFydGZpbGV1cGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NtYXJ0LWZvcm0vc21hcnRmaWxldXBsb2FkZXIvc21hcnRmaWxldXBsb2FkZXIuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVpLWFjdGlvbi1maWxlLXVwbG9hZC1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91aS1hY3Rpb24tZmlsZS11cGxvYWQtZGlhbG9nLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZVVwbG9hZFByaW1lTmcnKSBmaWxlVXBsb2FkUHJpbWUhOiBGaWxlVXBsb2FkO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRNYXRlcmlhbCcpIGZpbGVVcGxvYWRNYXRlcmlhbCE6IFNtYXJ0ZmlsZXVwbG9hZGVyQ29tcG9uZW50O1xyXG5cclxuICBjb2RlITogc3RyaW5nO1xyXG5cclxuICBkaWFsb2dUeXBlITogJ2RpYWxvZycgfCAnaW5wdXREaWFsb2cnIHwgJ2lucHV0MkRpYWxvZyc7XHJcblxyXG4gIGRlc2NyaXB0b3I/OiBVaUFjdGlvbkRlc2NyaXB0b3I7XHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcbiAgdXBsb2FkV2lkZ2V0VHlwZSA9IFVwbG9hZFdpZGdldFR5cGU7XHJcbiAgaTE4bj86IFNtYXJ0RmlsZVVwbG9hZGVySTE4bjtcclxuICBtYXhTaXplTWI6IG51bWJlciA9IDI1O1xyXG4gIGZpbGVGb3JtYXRzPzogc3RyaW5nW107XHJcbiAgaXNNdWx0aXBsZT86IGJvb2xlYW47XHJcblxyXG4gIHVwbG9hZGVkRmlsZXM6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnZmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UnKSBwcml2YXRlIHNlcnZpY2U6IFVpQWN0aW9uRmlsZVVwbG9hZERpYWxvZ1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBwdWJsaWMgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIHByaXZhdGUgbWFuYWdlcjogVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5jb2RlID0gdGhpcy5zZXJ2aWNlLmFjdGlvbi5jb2RlITtcclxuICAgIHRoaXMuc2V0VXAoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2UuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRVcCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGVzY3JpcHRvciA9IGF3YWl0IHRoaXMubWFuYWdlci5nZXRBY3Rpb25EZXNjcmlwdG9yKHRoaXMuc2VydmljZS5hY3Rpb24pO1xyXG5cclxuICAgIHRoaXMuaXNNdWx0aXBsZSA9IHRoaXMuc2VydmljZS5pc011bHRpcGxlO1xyXG4gICAgdGhpcy5tYXhTaXplTWIgPSBOdW1iZXIodGhpcy5kZXNjcmlwdG9yLnVwbG9hZD8ubWF4U2l6ZSk7XHJcbiAgICAvLyBmaWxlRm9ybWF0cyA9IHRoaXMuZGVzY3JpcHRvci51cGxvYWQ/LmZvcm1hdHM7XHJcbiAgICB0aGlzLmkxOG4gPSB7XHJcbiAgICAgIGFkZEZpbGU6IHRoaXMuZGVzY3JpcHRvci51cGxvYWQ/LnRpdGxlID8/ICdkb2t1bWVudHVtIGhvenrDoWFkw6FzYScsXHJcbiAgICAgIGJyb3dzZU9yRHJhZzogdGhpcy5kZXNjcmlwdG9yLnVwbG9hZD8uZGVzY3JpcHRpb24gPz8gJ3RhbGzDs3rDoXMgdmFneSBiZWjDunrDoXMnLFxyXG4gICAgICBmb3JtYXRzOiB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy5mb3JtYXRzID8/ICcnLFxyXG4gICAgICBtYXhTaXplOiB0aGlzLmRlc2NyaXB0b3IudXBsb2FkPy5tYXhTaXplID8/ICcnLFxyXG4gICAgICB1cGxvYWQ6IHRoaXMuZGVzY3JpcHRvci51cGxvYWQ/LnVwbG9hZEJ1dHRvblRpdGxlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUT0RPIHNldCBtYXggc2l6ZSBhbmQgZmlsZSBmb3JtYXRzIGJ5IFVpQWN0aW9uLnBhcmFtc1xyXG5cclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3JbdGhpcy5zZXJ2aWNlLmlucHV0VHlwZU5hbWVdKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nVHlwZSA9IHRoaXMuc2VydmljZS5pbnB1dFR5cGVOYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaWFsb2dUeXBlID0gdGhpcy5kZXNjcmlwdG9yLmlucHV0RGlhbG9nID8gJ2lucHV0RGlhbG9nJyA6ICdkaWFsb2cnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGl0bGUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvclt0aGlzLmRpYWxvZ1R5cGVdPy50aXRsZSA/PyAnRsOhamwgaG96esOhYWTDoXNhJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldFRleHQoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvclt0aGlzLmRpYWxvZ1R5cGVdPy50ZXh0ID8/ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBnZXRBY3Rpb25CdXR0b25MYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRvcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yW3RoaXMuZGlhbG9nVHlwZV0/LmFjdGlvbkJ1dHRvbi5jYXB0aW9uID8/ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICBnZXRBY3Rpb25CdXR0b25Db2xvcigpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRvcikge1xyXG4gICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yW3RoaXMuZGlhbG9nVHlwZV0/LmFjdGlvbkJ1dHRvbi5jb2xvciA/PyAnJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgZ2V0Q2FuY2VsQnV0dG9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvclt0aGlzLmRpYWxvZ1R5cGVdPy5jYW5jZWxCdXR0b24uY2FwdGlvbiA/PyAnJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbiAgZ2V0Q2FuY2VsQnV0dG9uQ29sb3IoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmRlc2NyaXB0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvclt0aGlzLmRpYWxvZ1R5cGVdPy5jYW5jZWxCdXR0b24uY29sb3IgPz8gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB1cGxvYWQoZmlsZXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2Uub25TYXZlKGZpbGVzKTtcclxuICB9XHJcbiAgb25TZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICBmb3IgKGxldCBmaWxlIG9mIGV2ZW50LmZpbGVzKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlcyhldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2Uub25TYXZlKHRoaXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlcnZpY2UuY2FuY2VsKCk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRSZWNvcmRpbmcoZmlsZTogYW55KSB7XHJcbiAgICB0aGlzLmxvYWRGaWxlc0ludG9XaWRnZXQoW2ZpbGVdKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEltYWdlKGZpbGVzOiBhbnkpIHtcclxuICAgIHRoaXMubG9hZEZpbGVzSW50b1dpZGdldChmaWxlcyk7XHJcbiAgfVxyXG5cclxuICBsb2FkRmlsZXNJbnRvV2lkZ2V0KGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGlmIChDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcgPT09IHRoaXMuY29tcExpYikge1xyXG4gICAgICBjb25zdCBkYXRhVHJhbnNmZXIgPSBuZXcgRGF0YVRyYW5zZmVyKCk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgICBkYXRhVHJhbnNmZXIuaXRlbXMuYWRkKGZpbGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBmaWxlTGlzdDogRmlsZUxpc3QgPSBkYXRhVHJhbnNmZXIuZmlsZXM7XHJcblxyXG4gICAgICBjb25zdCBmYWtlRXZlbnQgPSB7XHJcbiAgICAgICAgdGFyZ2V0OiB7XHJcbiAgICAgICAgICBmaWxlczogZmlsZUxpc3QsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0eXBlOiAnY2hhbmdlJyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZFByaW1lLm9uRmlsZVNlbGVjdChmYWtlRXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkTWF0ZXJpYWwuZmlsZXMucHVzaCguLi5maWxlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250YWluc0ZpbGVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXBsb2FkZWRGaWxlcy5sZW5ndGggPiAwO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9sZGVyTmFtZURpYWxvZ0NvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXJDb250YWluZXJcIj5cclxuICAgIDxoMyBjbGFzcz1cImNvbG9yLWFjY2VudC03MDBcIj5cclxuICAgICAge3sgZ2V0VGl0bGUoKSB9fVxyXG4gICAgPC9oMz5cclxuICAgIEBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5Lk1BVEVSSUFMKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgPHNtYXJ0LWljb24gW2NvbG9yXT1cIidwcmltYXJ5J1wiIFtpY29uXT1cIidYJ1wiPjwvc21hcnQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfUBlbHNlIHtcclxuICAgIDxwLWJ1dHRvbiBpY29uPVwicGkgcGktdGltZXNcIiBbcm91bmRlZF09XCJ0cnVlXCIgW3RleHRdPVwidHJ1ZVwiIChjbGljayk9XCJjYW5jZWwoKVwiIC8+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgPHA+XHJcbiAgICB7eyBnZXRUZXh0KCkgfX1cclxuICA8L3A+XHJcblxyXG4gIDwhLS0gSU1BR0UgVFlQRSAtLT5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICB0aGlzLmRlc2NyaXB0b3I/LnVwbG9hZD8udXBsb2FkV2lkZ2V0VHlwZSA9PSB1cGxvYWRXaWRnZXRUeXBlLklNQUdFIHx8XHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvcj8udXBsb2FkPy51cGxvYWRXaWRnZXRUeXBlID09IHVwbG9hZFdpZGdldFR5cGUuQUxMXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDxwaG90by1jYXB0dXJlLXdpZGdldCAocGhvdG9DYXB0dXJlZCk9XCJ1cGxvYWRJbWFnZSgkZXZlbnQpXCI+IDwvcGhvdG8tY2FwdHVyZS13aWRnZXQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gU09VTkQgVFlQRSAtLT5cclxuICA8bmctY29udGFpbmVyXHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICB0aGlzLmRlc2NyaXB0b3I/LnVwbG9hZD8udXBsb2FkV2lkZ2V0VHlwZSA9PSB1cGxvYWRXaWRnZXRUeXBlLlNPVU5EIHx8XHJcbiAgICAgIHRoaXMuZGVzY3JpcHRvcj8udXBsb2FkPy51cGxvYWRXaWRnZXRUeXBlID09IHVwbG9hZFdpZGdldFR5cGUuQUxMXHJcbiAgICBcIlxyXG4gID5cclxuICAgIDx2b2ljZS1yZWNvcmQtd2lkZ2V0IChyZWNvcmRpbmdTYXZlZCk9XCJ1cGxvYWRSZWNvcmRpbmcoJGV2ZW50KVwiPiA8L3ZvaWNlLXJlY29yZC13aWRnZXQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIEBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuXHJcbiAgPHAtZmlsZVVwbG9hZFxyXG4gICAgI2ZpbGVVcGxvYWRQcmltZU5nXHJcbiAgICBuYW1lPVwiZmlsZXNbXVwiXHJcbiAgICB1cmw9XCJcIlxyXG4gICAgKG9uU2VuZCk9XCJ1cGxvYWRGaWxlcygkZXZlbnQpXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcclxuICAgIChvblJlbW92ZSk9XCJvblJlbW92ZSgkZXZlbnQpXCJcclxuICAgIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICAgIFthY2NlcHRdPVwidGhpcy5kZXNjcmlwdG9yPy51cGxvYWQ/LmZvcm1hdHMgPz8gJydcIlxyXG4gICAgW21heEZpbGVTaXplXT1cIm1heFNpemVNYiAqIDEwMjQgKiAxMDI0XCJcclxuICAgIHVwbG9hZExhYmVsPVwiRmVsdMO2bHTDqXNcIlxyXG4gICAgY2FuY2VsTGFiZWw9XCJNw6lnc2VtXCJcclxuICAgIGNob29zZUxhYmVsPVwiVsOhbGFzenTDoXNcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRGaWVsZFwiIFtoaWRkZW5dPVwiZ2V0Q29udGFpbnNGaWxlcygpXCI+XHJcbiAgICAgICAgPHNtYXJ0LWljb24gW2ljb25dPVwiJ3VwbG9hZCdcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXNzYWdlXCI+SMO6enphIGlkZSBhIGbDoWpsb2thdC48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtZmlsZVVwbG9hZD5cclxuXHJcbiAgfUBlbHNle1xyXG5cclxuICA8c21hcnRmaWxldXBsb2FkZXJcclxuICAgICNmaWxlVXBsb2FkTWF0ZXJpYWxcclxuICAgIFtpMThuXT1cImkxOG5cIlxyXG4gICAgW2ZpbGVGb3JtYXRzXT1cImZpbGVGb3JtYXRzXCJcclxuICAgIFttYXhTaXplTWJdPVwibWF4U2l6ZU1iXCJcclxuICAgIFt1cGxvYWRDYWxsYmFja109XCJ1cGxvYWQuYmluZCh0aGlzKVwiXHJcbiAgICBbaXNNdWx0aXBsZV09XCJpc011bHRpcGxlXCJcclxuICA+PC9zbWFydGZpbGV1cGxvYWRlcj5cclxuICB9XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmb2xkZXJOYW1lRGlhbG9nQnV0dG9uc0NvbnRhaW5lclwiPlxyXG4gICAgQGlmKGNvbXBMaWIgPT09IGNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgPHAtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbbGFiZWxdPVwiZ2V0Q2FuY2VsQnV0dG9uTGFiZWwoKVwiXHJcbiAgICAgIFtpY29uXT1cIidwaSBwaS10aW1lcydcIlxyXG4gICAgPjwvcC1idXR0b24+XHJcbiAgICB9QGVsc2V7XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiBbY29sb3JdPVwiZ2V0Q2FuY2VsQnV0dG9uQ29sb3IoKVwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICB7eyBnZXRDYW5jZWxCdXR0b25MYWJlbCgpIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbY29sb3JdPVwiZ2V0QWN0aW9uQnV0dG9uQ29sb3IoKVwiIChjbGljayk9XCJ1cGxvYWQoKVwiPlxyXG4gICAgICB7eyBnZXRBY3Rpb25CdXR0b25MYWJlbCgpIH19XHJcbiAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=