@sam-senior/photo 1.2.8 → 2.0.0

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.
@@ -0,0 +1,233 @@
1
+ import { Component, ViewChild, EventEmitter, ViewEncapsulation } from '@angular/core';
2
+ import { Input } from '@angular/core';
3
+ import { Output } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@seniorsistemas/angular-components/image-cropper";
7
+ import * as i2 from "@sam-senior/photo-capture";
8
+ import * as i3 from "primeng/api";
9
+ import * as i4 from "primeng/dialog";
10
+ import * as i5 from "@seniorsistemas/angular-components/thumbnail";
11
+ import * as i6 from "@seniorsistemas/angular-components/button";
12
+ import * as i7 from "@seniorsistemas/angular-components/tile";
13
+ export class PhotoComponent {
14
+ imageCropperService;
15
+ photoCaptureService;
16
+ imageInput;
17
+ key = 'key';
18
+ photo;
19
+ actionIconClass = 'fa fa-camera';
20
+ photoSize = 'medium';
21
+ maxPhotoSize = 1;
22
+ photoWidth = 670;
23
+ photoHeight = 400;
24
+ canPhotoUpload = true;
25
+ canPhotoCapture = true;
26
+ cropperTitle = `Recortar`;
27
+ cropperActionCancel = `Cancelar`;
28
+ cropperActionCrop = `Recortar`;
29
+ cameraDialogLabel = `Captura`;
30
+ cameraDialogCaptureLabel = `Capturar`;
31
+ selectPhotoTypeLabel = `Selecionar imagem`;
32
+ selectUploadTypeLabel = `Upload`;
33
+ selectUploadTypeDescription = `Selecione uma imagem do seu computador`;
34
+ selectCaptureTypeLabel = `Capturar`;
35
+ selectCaptureTypeLabelDescription = `Capture uma imagem do seu dispositivo`;
36
+ dialogCancelLabel = `Cancelar`;
37
+ photoCrop = new EventEmitter();
38
+ openCamera = new EventEmitter();
39
+ closeCamera = new EventEmitter();
40
+ cameraError = new EventEmitter();
41
+ invalidPhotoSize = new EventEmitter();
42
+ isLoading = new EventEmitter();
43
+ photoContent;
44
+ cameraDialog = false;
45
+ selectPhotoType = false;
46
+ onChange = (_) => { };
47
+ onTouched = () => { };
48
+ constructor(imageCropperService, photoCaptureService) {
49
+ this.imageCropperService = imageCropperService;
50
+ this.photoCaptureService = photoCaptureService;
51
+ }
52
+ changePhoto() {
53
+ if (this.canPhotoCapture && this.canPhotoUpload) {
54
+ this.selectPhotoType = true;
55
+ }
56
+ else if (this.canPhotoCapture) {
57
+ this.onOpenCamera();
58
+ }
59
+ else if (this.canPhotoUpload) {
60
+ this.onOpenUpload();
61
+ }
62
+ }
63
+ registerOnChange(fn) {
64
+ this.onChange = fn;
65
+ }
66
+ registerOnTouched(fn) {
67
+ this.onTouched = fn;
68
+ }
69
+ writeValue(value) {
70
+ this.photo = value;
71
+ }
72
+ onOpenCamera() {
73
+ this.closeSelectPhotoType();
74
+ this.cameraDialog = true;
75
+ this.photoCaptureService.setKey(this.key);
76
+ this.photoCaptureService.start();
77
+ this.openCamera.emit();
78
+ }
79
+ closeSelectPhotoType() {
80
+ this.selectPhotoType = false;
81
+ }
82
+ onOpenUpload() {
83
+ this.closeSelectPhotoType();
84
+ this.imageInput.nativeElement.value = null;
85
+ this.imageInput.nativeElement.click();
86
+ }
87
+ photoSelected(event) {
88
+ const [file] = event.srcElement.files;
89
+ this.photoRender(file);
90
+ }
91
+ onCloseCamera() {
92
+ this.cameraDialog = false;
93
+ this.photoCaptureService.stop();
94
+ this.closeCamera.emit();
95
+ }
96
+ onPhotoCapture() {
97
+ this.isLoading.emit(true);
98
+ this.photoCaptureService.setKey(this.key);
99
+ this.photoCaptureService.takePhoto();
100
+ }
101
+ onPhotoTake(photo) {
102
+ if (this.photoCaptureService.getKey() === this.key) {
103
+ this.photoRender(photo.blob);
104
+ this.onCloseCamera();
105
+ }
106
+ }
107
+ onCameraError(error) {
108
+ if (this.photoCaptureService.getKey() === this.key) {
109
+ this.onCloseCamera();
110
+ this.cameraError.emit(error);
111
+ }
112
+ }
113
+ photoRender(file) {
114
+ if (file) {
115
+ const fileReader = new FileReader();
116
+ fileReader.onloadend =
117
+ photoRender => this.photoChopper(photoRender);
118
+ fileReader.readAsDataURL(file);
119
+ }
120
+ }
121
+ photoChopper(photoRender) {
122
+ this.imageCropperService.show({
123
+ imageSource: photoRender.target.result,
124
+ croppedCanvas: imageCanvas => {
125
+ imageCanvas.toBlob(blob => {
126
+ this.setPhotoContent(imageCanvas.toDataURL(), blob);
127
+ this.onCreateBlob();
128
+ });
129
+ },
130
+ header: this.cropperTitle,
131
+ emptyStateActionLabel: this.cropperActionCancel,
132
+ allowSelectAnother: false,
133
+ allowRemove: false,
134
+ cropLabel: this.cropperActionCrop,
135
+ rounded: true,
136
+ aspectRatio: 3 / 4
137
+ });
138
+ this.isLoading.emit(false);
139
+ }
140
+ onCreateBlob() {
141
+ if (this.getMaxSizeInBites() > this.photoContent.blob.size) {
142
+ this.photoCrop.emit(this.photoContent);
143
+ this.photo = this.photoContent.image;
144
+ this.onChange(this.photo);
145
+ }
146
+ else {
147
+ this.invalidPhotoSize.emit();
148
+ }
149
+ }
150
+ getMaxSizeInBites() {
151
+ return (this.maxPhotoSize * 1000) * 1000;
152
+ }
153
+ setPhotoContent(imageUri, imageBlob) {
154
+ this.photoContent = {
155
+ image: imageUri,
156
+ blob: imageBlob
157
+ };
158
+ }
159
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoComponent, deps: [{ token: i1.ImageCropperService }, { token: i2.PhotoCaptureService }], target: i0.ɵɵFactoryTarget.Component });
160
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotoComponent, selector: "sam-photo", inputs: { key: "key", photo: "photo", actionIconClass: "actionIconClass", photoSize: "photoSize", maxPhotoSize: "maxPhotoSize", photoWidth: "photoWidth", photoHeight: "photoHeight", canPhotoUpload: "canPhotoUpload", canPhotoCapture: "canPhotoCapture", cropperTitle: "cropperTitle", cropperActionCancel: "cropperActionCancel", cropperActionCrop: "cropperActionCrop", cameraDialogLabel: "cameraDialogLabel", cameraDialogCaptureLabel: "cameraDialogCaptureLabel", selectPhotoTypeLabel: "selectPhotoTypeLabel", selectUploadTypeLabel: "selectUploadTypeLabel", selectUploadTypeDescription: "selectUploadTypeDescription", selectCaptureTypeLabel: "selectCaptureTypeLabel", selectCaptureTypeLabelDescription: "selectCaptureTypeLabelDescription", dialogCancelLabel: "dialogCancelLabel" }, outputs: { photoCrop: "photoCrop", openCamera: "openCamera", closeCamera: "closeCamera", cameraError: "cameraError", invalidPhotoSize: "invalidPhotoSize", isLoading: "isLoading" }, providers: [
161
+ {
162
+ provide: NG_VALUE_ACCESSOR,
163
+ useExisting: PhotoComponent,
164
+ multi: true
165
+ }
166
+ ], viewQueries: [{ propertyName: "imageInput", first: true, predicate: ["imageInput"], descendants: true }], ngImport: i0, template: "<input #imageInput type=\"file\" class=\"photo__input-file--hidden\" (change)=\"photoSelected($event)\" accept=\"image/*\">\r\n<s-thumbnail [size]=\"photoSize\" iconClass=\"fa fa-user\" (click)=\"changePhoto()\"\r\n [hasAction]=\"canPhotoUpload || canPhotoCapture\" [imageSource]=\"photo\" [actionIconClass]=\"actionIconClass\">\r\n</s-thumbnail>\r\n\r\n<p-dialog styleClass=\"photo-capture-custom\" [(visible)]=\"cameraDialog\" [header]=\"cameraDialogLabel\"\r\n [style]=\"{width: '700px'}\" appendTo='body' [modal]=\"true\">\r\n <sam-photo-capture [width]=\"photoWidth\" [height]=\"photoHeight\" (photoTake)=\"onPhotoTake($event)\"\r\n (error)=\"onCameraError($event)\"></sam-photo-capture>\r\n <p-footer>\r\n <s-button id=\"takePhotoBtn\" priority=\"primary\" [label]=\"cameraDialogCaptureLabel\" (click)=\"onPhotoCapture()\">\r\n </s-button>\r\n <s-button id=\"cancelBtn\" priority=\"link\" [label]=\"dialogCancelLabel\" (click)=\"onCloseCamera()\"></s-button>\r\n </p-footer>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"selectPhotoType\" [header]=\"selectPhotoTypeLabel\" [style]=\"{width: '400px'}\" appendTo='body' [modal]=\"true\"\r\n [closable]=\"false\">\r\n <s-tile [label]=\"selectUploadTypeLabel\" [description]=\"selectUploadTypeDescription\" iconClass=\"fa fa-upload\"\r\n (click)=\"onOpenUpload()\"></s-tile>\r\n <br>\r\n <s-tile [label]=\"selectCaptureTypeLabel\" [description]=\"selectCaptureTypeLabelDescription\" iconClass=\"fa fa-camera\"\r\n (click)=\"onOpenCamera()\"></s-tile>\r\n <p-footer>\r\n <s-button id=\"cancelBtn\" priority=\"link\" [label]=\"dialogCancelLabel\" (click)=\"closeSelectPhotoType()\"></s-button>\r\n </p-footer>\r\n</p-dialog>\r\n", styles: [".photo__input-file--hidden{position:fixed;top:-100em}.select-photo-type-container{display:flex;flex-direction:row;align-items:center;justify-content:center}.select-photo-type-item{color:gray;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center}.select-photo-type-item:nth-child(1){border-right:solid 1px #cccccc}.select-photo-type-item i{font-size:80px;margin-left:40px;margin-right:40px}.select-photo-type-item span{margin-top:10px}\n"], dependencies: [{ kind: "component", type: i3.Footer, selector: "p-footer" }, { kind: "component", type: i4.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i5.ThumbnailComponent, selector: "s-thumbnail", inputs: ["id", "size", "imageSource", "imageFallback", "imageAlt", "iconClass", "hasAction", "actionIconClass", "isTile", "isBrand"] }, { kind: "component", type: i2.PhotoCaptureComponent, selector: "sam-photo-capture", inputs: ["width", "height"], outputs: ["error", "open", "photoTake"] }, { kind: "component", type: i6.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor"], outputs: ["clicked"] }, { kind: "component", type: i7.TileComponent, selector: "s-tile", inputs: ["id", "label", "description", "iconClass", "imageSource", "imageAlt", "disabled", "tabIndex", "thumbnail"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None });
167
+ }
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoComponent, decorators: [{
169
+ type: Component,
170
+ args: [{ selector: 'sam-photo', providers: [
171
+ {
172
+ provide: NG_VALUE_ACCESSOR,
173
+ useExisting: PhotoComponent,
174
+ multi: true
175
+ }
176
+ ], encapsulation: ViewEncapsulation.None, template: "<input #imageInput type=\"file\" class=\"photo__input-file--hidden\" (change)=\"photoSelected($event)\" accept=\"image/*\">\r\n<s-thumbnail [size]=\"photoSize\" iconClass=\"fa fa-user\" (click)=\"changePhoto()\"\r\n [hasAction]=\"canPhotoUpload || canPhotoCapture\" [imageSource]=\"photo\" [actionIconClass]=\"actionIconClass\">\r\n</s-thumbnail>\r\n\r\n<p-dialog styleClass=\"photo-capture-custom\" [(visible)]=\"cameraDialog\" [header]=\"cameraDialogLabel\"\r\n [style]=\"{width: '700px'}\" appendTo='body' [modal]=\"true\">\r\n <sam-photo-capture [width]=\"photoWidth\" [height]=\"photoHeight\" (photoTake)=\"onPhotoTake($event)\"\r\n (error)=\"onCameraError($event)\"></sam-photo-capture>\r\n <p-footer>\r\n <s-button id=\"takePhotoBtn\" priority=\"primary\" [label]=\"cameraDialogCaptureLabel\" (click)=\"onPhotoCapture()\">\r\n </s-button>\r\n <s-button id=\"cancelBtn\" priority=\"link\" [label]=\"dialogCancelLabel\" (click)=\"onCloseCamera()\"></s-button>\r\n </p-footer>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"selectPhotoType\" [header]=\"selectPhotoTypeLabel\" [style]=\"{width: '400px'}\" appendTo='body' [modal]=\"true\"\r\n [closable]=\"false\">\r\n <s-tile [label]=\"selectUploadTypeLabel\" [description]=\"selectUploadTypeDescription\" iconClass=\"fa fa-upload\"\r\n (click)=\"onOpenUpload()\"></s-tile>\r\n <br>\r\n <s-tile [label]=\"selectCaptureTypeLabel\" [description]=\"selectCaptureTypeLabelDescription\" iconClass=\"fa fa-camera\"\r\n (click)=\"onOpenCamera()\"></s-tile>\r\n <p-footer>\r\n <s-button id=\"cancelBtn\" priority=\"link\" [label]=\"dialogCancelLabel\" (click)=\"closeSelectPhotoType()\"></s-button>\r\n </p-footer>\r\n</p-dialog>\r\n", styles: [".photo__input-file--hidden{position:fixed;top:-100em}.select-photo-type-container{display:flex;flex-direction:row;align-items:center;justify-content:center}.select-photo-type-item{color:gray;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center}.select-photo-type-item:nth-child(1){border-right:solid 1px #cccccc}.select-photo-type-item i{font-size:80px;margin-left:40px;margin-right:40px}.select-photo-type-item span{margin-top:10px}\n"] }]
177
+ }], ctorParameters: () => [{ type: i1.ImageCropperService }, { type: i2.PhotoCaptureService }], propDecorators: { imageInput: [{
178
+ type: ViewChild,
179
+ args: [`imageInput`]
180
+ }], key: [{
181
+ type: Input
182
+ }], photo: [{
183
+ type: Input
184
+ }], actionIconClass: [{
185
+ type: Input
186
+ }], photoSize: [{
187
+ type: Input
188
+ }], maxPhotoSize: [{
189
+ type: Input
190
+ }], photoWidth: [{
191
+ type: Input
192
+ }], photoHeight: [{
193
+ type: Input
194
+ }], canPhotoUpload: [{
195
+ type: Input
196
+ }], canPhotoCapture: [{
197
+ type: Input
198
+ }], cropperTitle: [{
199
+ type: Input
200
+ }], cropperActionCancel: [{
201
+ type: Input
202
+ }], cropperActionCrop: [{
203
+ type: Input
204
+ }], cameraDialogLabel: [{
205
+ type: Input
206
+ }], cameraDialogCaptureLabel: [{
207
+ type: Input
208
+ }], selectPhotoTypeLabel: [{
209
+ type: Input
210
+ }], selectUploadTypeLabel: [{
211
+ type: Input
212
+ }], selectUploadTypeDescription: [{
213
+ type: Input
214
+ }], selectCaptureTypeLabel: [{
215
+ type: Input
216
+ }], selectCaptureTypeLabelDescription: [{
217
+ type: Input
218
+ }], dialogCancelLabel: [{
219
+ type: Input
220
+ }], photoCrop: [{
221
+ type: Output
222
+ }], openCamera: [{
223
+ type: Output
224
+ }], closeCamera: [{
225
+ type: Output
226
+ }], cameraError: [{
227
+ type: Output
228
+ }], invalidPhotoSize: [{
229
+ type: Output
230
+ }], isLoading: [{
231
+ type: Output
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FtLXBob3RvL3NyYy9saWIvcGhvdG8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FtLXBob3RvL3NyYy9saWIvcGhvdG8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFjLGlCQUFpQixFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQW1CekUsTUFBTSxPQUFPLGNBQWM7SUF5Q2Y7SUFDQTtJQXpDZSxVQUFVLENBQWE7SUFFdkMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNaLEtBQUssQ0FBUztJQUNkLGVBQWUsR0FBRyxjQUFjLENBQUM7SUFDakMsU0FBUyxHQUFpQyxRQUFRLENBQUM7SUFDbkQsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxHQUFHLENBQUM7SUFDbEIsY0FBYyxHQUFHLElBQUksQ0FBQztJQUN0QixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBRXZCLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDMUIsbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0lBQ2pDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztJQUUvQixpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDOUIsd0JBQXdCLEdBQUcsVUFBVSxDQUFDO0lBQ3RDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO0lBQzNDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztJQUNqQywyQkFB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QkFBekIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24sIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJTZXJ2aWNlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyJztcclxuaW1wb3J0IHsgUGhvdG9DYXB0dXJlU2VydmljZSB9IGZyb20gJ0BzYW0tc2VuaW9yL3Bob3RvLWNhcHR1cmUnO1xyXG5cclxuaW1wb3J0IHsgUGhvdG9Nb2RlbCB9IGZyb20gJy4vcGhvdG8ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzYW0tcGhvdG8nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9waG90by5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGhvdG8uY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IFBob3RvQ29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGhvdG9Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQFZpZXdDaGlsZChgaW1hZ2VJbnB1dGApIGltYWdlSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGtleSA9ICdrZXknO1xyXG4gIEBJbnB1dCgpIHBob3RvOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWN0aW9uSWNvbkNsYXNzID0gJ2ZhIGZhLWNhbWVyYSc7XHJcbiAgQElucHV0KCkgcGhvdG9TaXplOiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnID0gJ21lZGl1bSc7XHJcbiAgQElucHV0KCkgbWF4UGhvdG9TaXplID0gMTtcclxuICBASW5wdXQoKSBwaG90b1dpZHRoID0gNjcwO1xyXG4gIEBJbnB1dCgpIHBob3RvSGVpZ2h0ID0gNDAwO1xyXG4gIEBJbnB1dCgpIGNhblBob3RvVXBsb2FkID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjYW5QaG90b0NhcHR1cmUgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjcm9wcGVyVGl0bGUgPSBgUmVjb3J0YXJgO1xyXG4gIEBJbnB1dCgpIGNyb3BwZXJBY3Rpb25DYW5jZWwgPSBgQ2FuY2VsYXJgO1xyXG4gIEBJbnB1dCgpIGNyb3BwZXJBY3Rpb25Dcm9wID0gYFJlY29ydGFyYDtcclxuXHJcbiAgQElucHV0KCkgY2FtZXJhRGlhbG9nTGFiZWwgPSBgQ2FwdHVyYWA7XHJcbiAgQElucHV0KCkgY2FtZXJhRGlhbG9nQ2FwdHVyZUxhYmVsID0gYENhcHR1cmFyYDtcclxuICBASW5wdXQoKSBzZWxlY3RQaG90b1R5cGVMYWJlbCA9IGBTZWxlY2lvbmFyIGltYWdlbWA7XHJcbiAgQElucHV0KCkgc2VsZWN0VXBsb2FkVHlwZUxhYmVsID0gYFVwbG9hZGA7XHJcbiAgQElucHV0KCkgc2VsZWN0VXBsb2FkVHlwZURlc2NyaXB0aW9uID0gYFNlbGVjaW9uZSB1bWEgaW1hZ2VtIGRvIHNldSBjb21wdXRhZG9yYDtcclxuICBASW5wdXQoKSBzZWxlY3RDYXB0dXJlVHlwZUxhYmVsID0gYENhcHR1cmFyYDtcclxuICBASW5wdXQoKSBzZWxlY3RDYXB0dXJlVHlwZUxhYmVsRGVzY3JpcHRpb24gPSBgQ2FwdHVyZSB1bWEgaW1hZ2VtIGRvIHNldSBkaXNwb3NpdGl2b2A7XHJcbiAgQElucHV0KCkgZGlhbG9nQ2FuY2VsTGFiZWwgPSBgQ2FuY2VsYXJgO1xyXG5cclxuICBAT3V0cHV0KCkgcGhvdG9Dcm9wID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvcGVuQ2FtZXJhID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZUNhbWVyYSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2FtZXJhRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGludmFsaWRQaG90b1NpemUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGlzTG9hZGluZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIHBob3RvQ29udGVudDogUGhvdG9Nb2RlbDtcclxuICBwdWJsaWMgY2FtZXJhRGlhbG9nID0gZmFsc2U7XHJcbiAgcHVibGljIHNlbGVjdFBob3RvVHlwZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW1hZ2VDcm9wcGVyU2VydmljZTogSW1hZ2VDcm9wcGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcGhvdG9DYXB0dXJlU2VydmljZTogUGhvdG9DYXB0dXJlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBjaGFuZ2VQaG90bygpIHtcclxuICAgIGlmICh0aGlzLmNhblBob3RvQ2FwdHVyZSAmJiB0aGlzLmNhblBob3RvVXBsb2FkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UGhvdG9UeXBlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jYW5QaG90b0NhcHR1cmUpIHtcclxuICAgICAgdGhpcy5vbk9wZW5DYW1lcmEoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jYW5QaG90b1VwbG9hZCkge1xyXG4gICAgICB0aGlzLm9uT3BlblVwbG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChfOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMucGhvdG8gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk9wZW5DYW1lcmEoKSB7XHJcbiAgICB0aGlzLmNsb3NlU2VsZWN0UGhvdG9UeXBlKCk7XHJcbiAgICB0aGlzLmNhbWVyYURpYWxvZyA9IHRydWU7XHJcbiAgICB0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2Uuc2V0S2V5KHRoaXMua2V5KTtcclxuICAgIHRoaXMucGhvdG9DYXB0dXJlU2VydmljZS5zdGFydCgpO1xyXG4gICAgdGhpcy5vcGVuQ2FtZXJhLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZVNlbGVjdFBob3RvVHlwZSgpIHtcclxuICAgIHRoaXMuc2VsZWN0UGhvdG9UeXBlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PcGVuVXBsb2FkKCkge1xyXG4gICAgdGhpcy5jbG9zZVNlbGVjdFBob3RvVHlwZSgpO1xyXG4gICAgKHRoaXMuaW1hZ2VJbnB1dC5uYXRpdmVFbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gbnVsbDtcclxuICAgICh0aGlzLmltYWdlSW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBob3RvU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgW2ZpbGVdID0gZXZlbnQuc3JjRWxlbWVudC5maWxlcztcclxuICAgIHRoaXMucGhvdG9SZW5kZXIoZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbG9zZUNhbWVyYSgpIHtcclxuICAgIHRoaXMuY2FtZXJhRGlhbG9nID0gZmFsc2U7XHJcbiAgICB0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgdGhpcy5jbG9zZUNhbWVyYS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QaG90b0NhcHR1cmUoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZy5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy5waG90b0NhcHR1cmVTZXJ2aWNlLnNldEtleSh0aGlzLmtleSk7XHJcbiAgICB0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2UudGFrZVBob3RvKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25QaG90b1Rha2UocGhvdG8pIHtcclxuICAgIGlmICh0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2UuZ2V0S2V5KCkgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgIHRoaXMucGhvdG9SZW5kZXIocGhvdG8uYmxvYik7XHJcbiAgICAgIHRoaXMub25DbG9zZUNhbWVyYSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2FtZXJhRXJyb3IoZXJyb3IpIHtcclxuICAgIGlmICh0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2UuZ2V0S2V5KCkgPT09IHRoaXMua2V5KSB7XHJcbiAgICAgIHRoaXMub25DbG9zZUNhbWVyYSgpO1xyXG4gICAgICB0aGlzLmNhbWVyYUVycm9yLmVtaXQoZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwaG90b1JlbmRlcihmaWxlKSB7XHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgZmlsZVJlYWRlci5vbmxvYWRlbmQgPVxyXG4gICAgICAgIHBob3RvUmVuZGVyID0+IHRoaXMucGhvdG9DaG9wcGVyKHBob3RvUmVuZGVyKTtcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwaG90b0Nob3BwZXIocGhvdG9SZW5kZXIpIHtcclxuICAgIHRoaXMuaW1hZ2VDcm9wcGVyU2VydmljZS5zaG93KHtcclxuICAgICAgaW1hZ2VTb3VyY2U6IHBob3RvUmVuZGVyLnRhcmdldC5yZXN1bHQsXHJcbiAgICAgIGNyb3BwZWRDYW52YXM6IGltYWdlQ2FudmFzID0+IHtcclxuICAgICAgICBpbWFnZUNhbnZhcy50b0Jsb2IoYmxvYiA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldFBob3RvQ29udGVudChpbWFnZUNhbnZhcy50b0RhdGFVUkwoKSwgYmxvYik7XHJcbiAgICAgICAgICB0aGlzLm9uQ3JlYXRlQmxvYigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBoZWFkZXI6IHRoaXMuY3JvcHBlclRpdGxlLFxyXG4gICAgICBlbXB0eVN0YXRlQWN0aW9uTGFiZWw6IHRoaXMuY3JvcHBlckFjdGlvbkNhbmNlbCxcclxuICAgICAgYWxsb3dTZWxlY3RBbm90aGVyOiBmYWxzZSxcclxuICAgICAgYWxsb3dSZW1vdmU6IGZhbHNlLFxyXG4gICAgICBjcm9wTGFiZWw6IHRoaXMuY3JvcHBlckFjdGlvbkNyb3AsXHJcbiAgICAgIHJvdW5kZWQ6IHRydWUsXHJcbiAgICAgIGFzcGVjdFJhdGlvOiAzIC8gNFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlzTG9hZGluZy5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25DcmVhdGVCbG9iKCkge1xyXG4gICAgaWYgKHRoaXMuZ2V0TWF4U2l6ZUluQml0ZXMoKSA+IHRoaXMucGhvdG9Db250ZW50LmJsb2Iuc2l6ZSkge1xyXG4gICAgICB0aGlzLnBob3RvQ3JvcC5lbWl0KHRoaXMucGhvdG9Db250ZW50KTtcclxuICAgICAgdGhpcy5waG90byA9IHRoaXMucGhvdG9Db250ZW50LmltYWdlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucGhvdG8pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnZhbGlkUGhvdG9TaXplLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4U2l6ZUluQml0ZXMoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubWF4UGhvdG9TaXplICogMTAwMCkgKiAxMDAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRQaG90b0NvbnRlbnQoaW1hZ2VVcmksIGltYWdlQmxvYikge1xyXG4gICAgdGhpcy5waG90b0NvbnRlbnQgPSB7XHJcbiAgICAgIGltYWdlOiBpbWFnZVVyaSxcclxuICAgICAgYmxvYjogaW1hZ2VCbG9iXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGlucHV0ICNpbWFnZUlucHV0IHR5cGU9XCJmaWxlXCIgY2xhc3M9XCJwaG90b19faW5wdXQtZmlsZS0taGlkZGVuXCIgKGNoYW5nZSk9XCJwaG90b1NlbGVjdGVkKCRldmVudClcIiBhY2NlcHQ9XCJpbWFnZS8qXCI+XHJcbjxzLXRodW1ibmFpbCBbc2l6ZV09XCJwaG90b1NpemVcIiBpY29uQ2xhc3M9XCJmYSBmYS11c2VyXCIgKGNsaWNrKT1cImNoYW5nZVBob3RvKClcIlxyXG4gIFtoYXNBY3Rpb25dPVwiY2FuUGhvdG9VcGxvYWQgfHwgY2FuUGhvdG9DYXB0dXJlXCIgW2ltYWdlU291cmNlXT1cInBob3RvXCIgW2FjdGlvbkljb25DbGFzc109XCJhY3Rpb25JY29uQ2xhc3NcIj5cclxuPC9zLXRodW1ibmFpbD5cclxuXHJcbjxwLWRpYWxvZyBzdHlsZUNsYXNzPVwicGhvdG8tY2FwdHVyZS1jdXN0b21cIiBbKHZpc2libGUpXT1cImNhbWVyYURpYWxvZ1wiIFtoZWFkZXJdPVwiY2FtZXJhRGlhbG9nTGFiZWxcIlxyXG4gIFtzdHlsZV09XCJ7d2lkdGg6ICc3MDBweCd9XCIgYXBwZW5kVG89J2JvZHknIFttb2RhbF09XCJ0cnVlXCI+XHJcbiAgPHNhbS1waG90by1jYXB0dXJlIFt3aWR0aF09XCJwaG90b1dpZHRoXCIgW2hlaWdodF09XCJwaG90b0hlaWdodFwiIChwaG90b1Rha2UpPVwib25QaG90b1Rha2UoJGV2ZW50KVwiXHJcbiAgICAoZXJyb3IpPVwib25DYW1lcmFFcnJvcigkZXZlbnQpXCI+PC9zYW0tcGhvdG8tY2FwdHVyZT5cclxuICA8cC1mb290ZXI+XHJcbiAgICA8cy1idXR0b24gaWQ9XCJ0YWtlUGhvdG9CdG5cIiBwcmlvcml0eT1cInByaW1hcnlcIiBbbGFiZWxdPVwiY2FtZXJhRGlhbG9nQ2FwdHVyZUxhYmVsXCIgKGNsaWNrKT1cIm9uUGhvdG9DYXB0dXJlKClcIj5cclxuICAgIDwvcy1idXR0b24+XHJcbiAgICA8cy1idXR0b24gaWQ9XCJjYW5jZWxCdG5cIiBwcmlvcml0eT1cImxpbmtcIiBbbGFiZWxdPVwiZGlhbG9nQ2FuY2VsTGFiZWxcIiAoY2xpY2spPVwib25DbG9zZUNhbWVyYSgpXCI+PC9zLWJ1dHRvbj5cclxuICA8L3AtZm9vdGVyPlxyXG48L3AtZGlhbG9nPlxyXG5cclxuPHAtZGlhbG9nIFsodmlzaWJsZSldPVwic2VsZWN0UGhvdG9UeXBlXCIgW2hlYWRlcl09XCJzZWxlY3RQaG90b1R5cGVMYWJlbFwiIFtzdHlsZV09XCJ7d2lkdGg6ICc0MDBweCd9XCIgYXBwZW5kVG89J2JvZHknIFttb2RhbF09XCJ0cnVlXCJcclxuICBbY2xvc2FibGVdPVwiZmFsc2VcIj5cclxuICA8cy10aWxlIFtsYWJlbF09XCJzZWxlY3RVcGxvYWRUeXBlTGFiZWxcIiBbZGVzY3JpcHRpb25dPVwic2VsZWN0VXBsb2FkVHlwZURlc2NyaXB0aW9uXCIgaWNvbkNsYXNzPVwiZmEgZmEtdXBsb2FkXCJcclxuICAgIChjbGljayk9XCJvbk9wZW5VcGxvYWQoKVwiPjwvcy10aWxlPlxyXG4gIDxicj5cclxuICA8cy10aWxlIFtsYWJlbF09XCJzZWxlY3RDYXB0dXJlVHlwZUxhYmVsXCIgW2Rlc2NyaXB0aW9uXT1cInNlbGVjdENhcHR1cmVUeXBlTGFiZWxEZXNjcmlwdGlvblwiIGljb25DbGFzcz1cImZhIGZhLWNhbWVyYVwiXHJcbiAgICAoY2xpY2spPVwib25PcGVuQ2FtZXJhKClcIj48L3MtdGlsZT5cclxuICA8cC1mb290ZXI+XHJcbiAgICA8cy1idXR0b24gaWQ9XCJjYW5jZWxCdG5cIiBwcmlvcml0eT1cImxpbmtcIiBbbGFiZWxdPVwiZGlhbG9nQ2FuY2VsTGFiZWxcIiAoY2xpY2spPVwiY2xvc2VTZWxlY3RQaG90b1R5cGUoKVwiPjwvcy1idXR0b24+XHJcbiAgPC9wLWZvb3Rlcj5cclxuPC9wLWRpYWxvZz5cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zYW0tcGhvdG8vc3JjL2xpYi9waG90by5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBQaG90b01vZGVsIHtcclxuICBpbWFnZTogc3RyaW5nO1xyXG4gIGJsb2I6IEJsb2I7XHJcbn1cclxuIl19
@@ -0,0 +1,57 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ConfirmDialogModule } from 'primeng/confirmdialog';
3
+ import { PanelModule } from 'primeng/panel';
4
+ import { ImageCropperModule, ImageCropperService } from '@seniorsistemas/angular-components/image-cropper';
5
+ import { StepsModule } from '@seniorsistemas/angular-components/steps';
6
+ import { ObjectCardModule } from '@seniorsistemas/angular-components/object-card';
7
+ import { ButtonModule } from '@seniorsistemas/angular-components/button';
8
+ import { TileModule } from '@seniorsistemas/angular-components/tile';
9
+ import { LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';
10
+ import { DialogModule } from 'primeng/dialog';
11
+ import { PhotoCaptureModule } from '@sam-senior/photo-capture';
12
+ import { PhotoComponent } from './photo.component';
13
+ import * as i0 from "@angular/core";
14
+ export class PhotoModule {
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PhotoModule, declarations: [PhotoComponent], imports: [PanelModule,
17
+ DialogModule,
18
+ StepsModule,
19
+ ObjectCardModule,
20
+ ImageCropperModule,
21
+ ConfirmDialogModule,
22
+ PhotoCaptureModule,
23
+ ButtonModule,
24
+ TileModule,
25
+ LoadingStateModule], exports: [PhotoComponent] });
26
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoModule, providers: [ImageCropperService], imports: [PanelModule,
27
+ DialogModule,
28
+ StepsModule,
29
+ ObjectCardModule,
30
+ ImageCropperModule,
31
+ ConfirmDialogModule,
32
+ PhotoCaptureModule,
33
+ ButtonModule,
34
+ TileModule,
35
+ LoadingStateModule] });
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoModule, decorators: [{
38
+ type: NgModule,
39
+ args: [{
40
+ declarations: [PhotoComponent],
41
+ imports: [
42
+ PanelModule,
43
+ DialogModule,
44
+ StepsModule,
45
+ ObjectCardModule,
46
+ ImageCropperModule,
47
+ ConfirmDialogModule,
48
+ PhotoCaptureModule,
49
+ ButtonModule,
50
+ TileModule,
51
+ LoadingStateModule
52
+ ],
53
+ providers: [ImageCropperService],
54
+ exports: [PhotoComponent]
55
+ }]
56
+ }] });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FtLXBob3RvL3NyYy9saWIvcGhvdG8ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQW1CbkQsTUFBTSxPQUFPLFdBQVc7d0dBQVgsV0FBVzt5R0FBWCxXQUFXLGlCQWhCUCxjQUFjLGFBRTNCLFdBQVc7WUFDWCxZQUFZO1lBQ1osV0FBVztZQUNYLGdCQUFnQjtZQUNoQixrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQixZQUFZO1lBQ1osVUFBVTtZQUNWLGtCQUFrQixhQUdWLGNBQWM7eUdBRWIsV0FBVyxhQUhYLENBQUMsbUJBQW1CLENBQUMsWUFYOUIsV0FBVztZQUNYLFlBQVk7WUFDWixXQUFXO1lBQ1gsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixVQUFVO1lBQ1Ysa0JBQWtCOzs0RkFLVCxXQUFXO2tCQWpCdkIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQzlCLE9BQU8sRUFBRTt3QkFDUCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixrQkFBa0I7cUJBQ25CO29CQUNELFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUNoQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7aUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29uZmlybURpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY29uZmlybWRpYWxvZyc7XHJcbmltcG9ydCB7IFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wYW5lbCc7XHJcbmltcG9ydCB7IEltYWdlQ3JvcHBlck1vZHVsZSwgSW1hZ2VDcm9wcGVyU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW1hZ2UtY3JvcHBlcic7XHJcbmltcG9ydCB7IFN0ZXBzTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9zdGVwcyc7XHJcbmltcG9ydCB7IE9iamVjdENhcmRNb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL29iamVjdC1jYXJkJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9idXR0b24nO1xyXG5pbXBvcnQgeyBUaWxlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90aWxlJztcclxuaW1wb3J0IHsgTG9hZGluZ1N0YXRlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9sb2FkaW5nLXN0YXRlJztcclxuaW1wb3J0IHsgRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQaG90b0NhcHR1cmVNb2R1bGUgfSBmcm9tICdAc2FtLXNlbmlvci9waG90by1jYXB0dXJlJztcclxuXHJcbmltcG9ydCB7IFBob3RvQ29tcG9uZW50IH0gZnJvbSAnLi9waG90by5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtQaG90b0NvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgUGFuZWxNb2R1bGUsXHJcbiAgICBEaWFsb2dNb2R1bGUsXHJcbiAgICBTdGVwc01vZHVsZSxcclxuICAgIE9iamVjdENhcmRNb2R1bGUsXHJcbiAgICBJbWFnZUNyb3BwZXJNb2R1bGUsXHJcbiAgICBDb25maXJtRGlhbG9nTW9kdWxlLFxyXG4gICAgUGhvdG9DYXB0dXJlTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgVGlsZU1vZHVsZSxcclxuICAgIExvYWRpbmdTdGF0ZU1vZHVsZVxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbSW1hZ2VDcm9wcGVyU2VydmljZV0sXHJcbiAgZXhwb3J0czogW1Bob3RvQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGhvdG9Nb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Public API Surface of photo
3
+ */
4
+ export * from './lib/photo.model';
5
+ export * from './lib/photo.component';
6
+ export * from './lib/photo.module';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NhbS1waG90by9zcmMvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHBob3RvXHJcbiAqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waG90by5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob3RvLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob3RvLm1vZHVsZSc7XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtLXNlbmlvci1waG90by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NhbS1waG90by9zcmMvc2FtLXNlbmlvci1waG90by50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19