@sam-senior/photo-capture 1.2.3 → 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.
Files changed (32) hide show
  1. package/esm2022/lib/photo-capture.component.mjs +156 -0
  2. package/esm2022/lib/photo-capture.module.mjs +17 -0
  3. package/esm2022/lib/photo-capture.service.mjs +48 -0
  4. package/esm2022/public_api.mjs +7 -0
  5. package/esm2022/sam-senior-photo-capture.mjs +5 -0
  6. package/fesm2022/sam-senior-photo-capture.mjs +226 -0
  7. package/fesm2022/sam-senior-photo-capture.mjs.map +1 -0
  8. package/{sam-senior-photo-capture.d.ts → index.d.ts} +5 -4
  9. package/lib/photo-capture.component.d.ts +34 -31
  10. package/lib/photo-capture.module.d.ts +7 -2
  11. package/lib/photo-capture.service.d.ts +20 -17
  12. package/package.json +21 -17
  13. package/public_api.d.ts +3 -3
  14. package/bundles/sam-senior-photo-capture.umd.js +0 -489
  15. package/bundles/sam-senior-photo-capture.umd.js.map +0 -1
  16. package/bundles/sam-senior-photo-capture.umd.min.js +0 -2
  17. package/bundles/sam-senior-photo-capture.umd.min.js.map +0 -1
  18. package/esm2015/lib/photo-capture.component.js +0 -287
  19. package/esm2015/lib/photo-capture.module.js +0 -16
  20. package/esm2015/lib/photo-capture.service.js +0 -110
  21. package/esm2015/public_api.js +0 -11
  22. package/esm2015/sam-senior-photo-capture.js +0 -9
  23. package/esm5/lib/photo-capture.component.js +0 -349
  24. package/esm5/lib/photo-capture.module.js +0 -20
  25. package/esm5/lib/photo-capture.service.js +0 -144
  26. package/esm5/public_api.js +0 -11
  27. package/esm5/sam-senior-photo-capture.js +0 -9
  28. package/fesm2015/sam-senior-photo-capture.js +0 -351
  29. package/fesm2015/sam-senior-photo-capture.js.map +0 -1
  30. package/fesm5/sam-senior-photo-capture.js +0 -448
  31. package/fesm5/sam-senior-photo-capture.js.map +0 -1
  32. package/sam-senior-photo-capture.metadata.json +0 -1
@@ -0,0 +1,156 @@
1
+ import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./photo-capture.service";
4
+ export class PhotoCaptureComponent {
5
+ photoCaptureService;
6
+ static PHOTO_DIMENSIONS = 700;
7
+ camera;
8
+ width = screen.width;
9
+ height = screen.height;
10
+ error = new EventEmitter();
11
+ open = new EventEmitter();
12
+ photoTake = new EventEmitter();
13
+ cameraElement;
14
+ effectiveHeight;
15
+ effectiveWidth;
16
+ cameraConfigConstraints = {
17
+ audio: false,
18
+ video: {
19
+ height: this.height,
20
+ facingMode: {
21
+ ideal: 'user'
22
+ }
23
+ }
24
+ };
25
+ constructor(photoCaptureService) {
26
+ this.photoCaptureService = photoCaptureService;
27
+ }
28
+ ngOnInit() {
29
+ this.photoCaptureService.onStart()
30
+ .subscribe(() => this.cameraStart());
31
+ this.photoCaptureService.onStop()
32
+ .subscribe(() => this.cameraStop());
33
+ this.photoTakeListener();
34
+ }
35
+ cameraStart() {
36
+ if (this.hasGetUserMedia()) {
37
+ this.createCameraElement();
38
+ this.initializeCamera();
39
+ }
40
+ else {
41
+ this.error.emit({
42
+ error: 'browser_not_support',
43
+ message: 'This browser does not support camera features (No getUserMedia)'
44
+ });
45
+ }
46
+ }
47
+ cameraStop() {
48
+ this.finalizeCamera();
49
+ }
50
+ createCameraElement() {
51
+ this.cameraElement = this.camera.nativeElement;
52
+ if (this.cameraElement) {
53
+ this.photoCaptureService.setVideoElement(this.cameraElement);
54
+ this.cameraElement.style.width = `${this.width}px`;
55
+ this.cameraElement.style.height = `${this.height}px`;
56
+ this.cameraElement.onerror = err => this.error.emit(err);
57
+ }
58
+ else {
59
+ this.error.emit({
60
+ error: 'browser_not_retriving_element',
61
+ message: 'The browser not retriving #camera element of browser'
62
+ });
63
+ }
64
+ }
65
+ initializeCamera() {
66
+ navigator.mediaDevices.getUserMedia(this.cameraConfigConstraints)
67
+ .then(mediaStream => {
68
+ this.setCameraElementSrcObject(mediaStream);
69
+ this.cameraElement.onloadedmetadata = () => this.onLoadCameraElement();
70
+ })
71
+ .catch(err => this.error.emit(err));
72
+ }
73
+ hasGetUserMedia() {
74
+ return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
75
+ }
76
+ setCameraElementSrcObject(mediaStream) {
77
+ this.cameraElement.srcObject = mediaStream;
78
+ }
79
+ onLoadCameraElement() {
80
+ this.getCameraElementDimensions();
81
+ this.updateCameraElementDimensions();
82
+ this.open.emit();
83
+ }
84
+ getCameraElementDimensions() {
85
+ this.effectiveHeight = this.height;
86
+ this.effectiveWidth = this.width;
87
+ }
88
+ updateCameraElementDimensions() {
89
+ this.cameraElement.height = this.effectiveHeight;
90
+ this.cameraElement.width = this.effectiveWidth;
91
+ this.cameraElement.style.width = `${this.effectiveWidth}px`;
92
+ this.cameraElement.style.height = `${this.effectiveHeight}px`;
93
+ }
94
+ photoTakeListener() {
95
+ this.photoCaptureService.onPhotoTaken()
96
+ .subscribe(() => {
97
+ this.takePhoto();
98
+ });
99
+ }
100
+ takePhoto() {
101
+ return new Promise(resolve => {
102
+ const canvas = this.getCameraImagemCanvas();
103
+ canvas.toBlob((blob) => {
104
+ this.photoTake.emit({
105
+ blob: blob,
106
+ image: canvas.toDataURL()
107
+ });
108
+ });
109
+ this.finalizeCamera();
110
+ resolve('');
111
+ });
112
+ }
113
+ finalizeCamera() {
114
+ if (this.cameraElement) {
115
+ if (this.cameraElement.srcObject) {
116
+ const video = this.cameraElement.srcObject;
117
+ if (video && video.getTracks) {
118
+ const [tracks] = video.getTracks();
119
+ if (tracks) {
120
+ tracks.stop();
121
+ }
122
+ }
123
+ }
124
+ }
125
+ }
126
+ getCameraImagemCanvas() {
127
+ const canvas = document.createElement('canvas');
128
+ canvas.width = PhotoCaptureComponent.PHOTO_DIMENSIONS;
129
+ canvas.height = PhotoCaptureComponent.PHOTO_DIMENSIONS;
130
+ canvas.getContext('2d').drawImage(this.cameraElement, 0, 0, PhotoCaptureComponent.PHOTO_DIMENSIONS, PhotoCaptureComponent.PHOTO_DIMENSIONS);
131
+ return canvas;
132
+ }
133
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureComponent, deps: [{ token: i1.PhotoCaptureService }], target: i0.ɵɵFactoryTarget.Component });
134
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotoCaptureComponent, selector: "sam-photo-capture", inputs: { width: "width", height: "height" }, outputs: { error: "error", open: "open", photoTake: "photoTake" }, viewQueries: [{ propertyName: "camera", first: true, predicate: ["camera"], descendants: true }], ngImport: i0, template: `<video #camera autoplay muted class="sam-camera"></video>`, isInline: true });
135
+ }
136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureComponent, decorators: [{
137
+ type: Component,
138
+ args: [{
139
+ selector: 'sam-photo-capture',
140
+ template: `<video #camera autoplay muted class="sam-camera"></video>`
141
+ }]
142
+ }], ctorParameters: () => [{ type: i1.PhotoCaptureService }], propDecorators: { camera: [{
143
+ type: ViewChild,
144
+ args: ['camera']
145
+ }], width: [{
146
+ type: Input
147
+ }], height: [{
148
+ type: Input
149
+ }], error: [{
150
+ type: Output
151
+ }], open: [{
152
+ type: Output
153
+ }], photoTake: [{
154
+ type: Output
155
+ }] } });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tY2FwdHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zYW0tcGhvdG8tY2FwdHVyZS9zcmMvbGliL3Bob3RvLWNhcHR1cmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFRdEcsTUFBTSxPQUFPLHFCQUFxQjtJQTRCdEI7SUExQkYsTUFBTSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUVWLE1BQU0sQ0FBYTtJQUV0QyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUV0QixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQixJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMxQixTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVqQyxhQUFhLENBQW1CO0lBQ2hDLGVBQWUsQ0FBUztJQUN4QixjQUFjLENBQVM7SUFFdkIsdUJBQXVCLEdBQTJCO1FBQ3hELEtBQUssRUFBRSxLQUFLO1FBQ1osS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsTUFBTTthQUNkO1NBQ0Y7S0FDRixDQUFDO0lBRUYsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUM5QyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUU7YUFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7YUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZCxLQUFLLEVBQUUscUJBQXFCO2dCQUM1QixPQUFPLEVBQUUsaUVBQWlFO2FBQzNFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBaUMsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZCxLQUFLLEVBQUUsK0JBQStCO2dCQUN0QyxPQUFPLEVBQUUsc0RBQXNEO2FBQ2hFLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQzthQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQ3pDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFdBQXdCO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztJQUM3QyxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFTSw2QkFBNkI7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQztRQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUM7SUFDaEUsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFO2FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sU0FBUztRQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDbEIsSUFBSSxFQUFFLElBQUk7b0JBQ1YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUU7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQXdCLENBQUM7Z0JBQzFELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLENBQUM7UUFDdEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1SSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQW5KVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiw0UUFGdEIsMkRBQTJEOzs0RkFFMUQscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSwyREFBMkQ7aUJBQ3RFO3dGQUs2QixNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLFFBQVE7Z0JBRVYsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFBob3RvQ2FwdHVyZVNlcnZpY2UgfSBmcm9tICcuL3Bob3RvLWNhcHR1cmUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhbS1waG90by1jYXB0dXJlJyxcclxuICB0ZW1wbGF0ZTogYDx2aWRlbyAjY2FtZXJhIGF1dG9wbGF5IG11dGVkIGNsYXNzPVwic2FtLWNhbWVyYVwiPjwvdmlkZW8+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGhvdG9DYXB0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgUEhPVE9fRElNRU5TSU9OUyA9IDcwMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FtZXJhJykgcHVibGljIGNhbWVyYTogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgd2lkdGggPSBzY3JlZW4ud2lkdGg7XHJcbiAgQElucHV0KCkgaGVpZ2h0ID0gc2NyZWVuLmhlaWdodDtcclxuXHJcbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwaG90b1Rha2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHByaXZhdGUgY2FtZXJhRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudDtcclxuICBwcml2YXRlIGVmZmVjdGl2ZUhlaWdodDogbnVtYmVyO1xyXG4gIHByaXZhdGUgZWZmZWN0aXZlV2lkdGg6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBjYW1lcmFDb25maWdDb25zdHJhaW50czogTWVkaWFTdHJlYW1Db25zdHJhaW50cyA9IHtcclxuICAgIGF1ZGlvOiBmYWxzZSxcclxuICAgIHZpZGVvOiB7XHJcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICAgIGZhY2luZ01vZGU6IHtcclxuICAgICAgICBpZGVhbDogJ3VzZXInXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGhvdG9DYXB0dXJlU2VydmljZTogUGhvdG9DYXB0dXJlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5waG90b0NhcHR1cmVTZXJ2aWNlLm9uU3RhcnQoKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2FtZXJhU3RhcnQoKSk7XHJcbiAgICB0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2Uub25TdG9wKClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbWVyYVN0b3AoKSk7XHJcbiAgICB0aGlzLnBob3RvVGFrZUxpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbWVyYVN0YXJ0KCkge1xyXG4gICAgaWYgKHRoaXMuaGFzR2V0VXNlck1lZGlhKCkpIHtcclxuICAgICAgdGhpcy5jcmVhdGVDYW1lcmFFbGVtZW50KCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNhbWVyYSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvci5lbWl0KHtcclxuICAgICAgICBlcnJvcjogJ2Jyb3dzZXJfbm90X3N1cHBvcnQnLFxyXG4gICAgICAgIG1lc3NhZ2U6ICdUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBjYW1lcmEgZmVhdHVyZXMgKE5vIGdldFVzZXJNZWRpYSknXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW1lcmFTdG9wKCkge1xyXG4gICAgdGhpcy5maW5hbGl6ZUNhbWVyYSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVDYW1lcmFFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW1lcmFFbGVtZW50ID0gdGhpcy5jYW1lcmEubmF0aXZlRWxlbWVudCBhcyBIVE1MVmlkZW9FbGVtZW50O1xyXG4gICAgaWYgKHRoaXMuY2FtZXJhRWxlbWVudCkge1xyXG4gICAgICB0aGlzLnBob3RvQ2FwdHVyZVNlcnZpY2Uuc2V0VmlkZW9FbGVtZW50KHRoaXMuY2FtZXJhRWxlbWVudCk7XHJcbiAgICAgIHRoaXMuY2FtZXJhRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMud2lkdGh9cHhgO1xyXG4gICAgICB0aGlzLmNhbWVyYUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5oZWlnaHR9cHhgO1xyXG4gICAgICB0aGlzLmNhbWVyYUVsZW1lbnQub25lcnJvciA9IGVyciA9PiB0aGlzLmVycm9yLmVtaXQoZXJyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXJyb3IuZW1pdCh7XHJcbiAgICAgICAgZXJyb3I6ICdicm93c2VyX25vdF9yZXRyaXZpbmdfZWxlbWVudCcsXHJcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBicm93c2VyIG5vdCByZXRyaXZpbmcgI2NhbWVyYSBlbGVtZW50IG9mIGJyb3dzZXInXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2FtZXJhKCk6IHZvaWQge1xyXG4gICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEodGhpcy5jYW1lcmFDb25maWdDb25zdHJhaW50cylcclxuICAgICAgLnRoZW4obWVkaWFTdHJlYW0gPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0Q2FtZXJhRWxlbWVudFNyY09iamVjdChtZWRpYVN0cmVhbSk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFFbGVtZW50Lm9ubG9hZGVkbWV0YWRhdGEgPSAoKSA9PlxyXG4gICAgICAgICAgdGhpcy5vbkxvYWRDYW1lcmFFbGVtZW50KCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5lcnJvci5lbWl0KGVycikpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNHZXRVc2VyTWVkaWEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENhbWVyYUVsZW1lbnRTcmNPYmplY3QobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbWVyYUVsZW1lbnQuc3JjT2JqZWN0ID0gbWVkaWFTdHJlYW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uTG9hZENhbWVyYUVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENhbWVyYUVsZW1lbnREaW1lbnNpb25zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNhbWVyYUVsZW1lbnREaW1lbnNpb25zKCk7XHJcbiAgICB0aGlzLm9wZW4uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYW1lcmFFbGVtZW50RGltZW5zaW9ucygpIHtcclxuICAgIHRoaXMuZWZmZWN0aXZlSGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICB0aGlzLmVmZmVjdGl2ZVdpZHRoID0gdGhpcy53aWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDYW1lcmFFbGVtZW50RGltZW5zaW9ucygpIHtcclxuICAgIHRoaXMuY2FtZXJhRWxlbWVudC5oZWlnaHQgPSB0aGlzLmVmZmVjdGl2ZUhlaWdodDtcclxuICAgIHRoaXMuY2FtZXJhRWxlbWVudC53aWR0aCA9IHRoaXMuZWZmZWN0aXZlV2lkdGg7XHJcbiAgICB0aGlzLmNhbWVyYUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt0aGlzLmVmZmVjdGl2ZVdpZHRofXB4YDtcclxuICAgIHRoaXMuY2FtZXJhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLmVmZmVjdGl2ZUhlaWdodH1weGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBob3RvVGFrZUxpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5waG90b0NhcHR1cmVTZXJ2aWNlLm9uUGhvdG9UYWtlbigpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGFrZVBob3RvKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0YWtlUGhvdG8oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuZ2V0Q2FtZXJhSW1hZ2VtQ2FudmFzKCk7XHJcbiAgICAgIGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcclxuICAgICAgICB0aGlzLnBob3RvVGFrZS5lbWl0KHtcclxuICAgICAgICAgIGJsb2I6IGJsb2IsXHJcbiAgICAgICAgICBpbWFnZTogY2FudmFzLnRvRGF0YVVSTCgpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZpbmFsaXplQ2FtZXJhKCk7XHJcbiAgICAgIHJlc29sdmUoJycpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmFsaXplQ2FtZXJhKCkge1xyXG4gICAgaWYgKHRoaXMuY2FtZXJhRWxlbWVudCkge1xyXG4gICAgICBpZiAodGhpcy5jYW1lcmFFbGVtZW50LnNyY09iamVjdCkge1xyXG4gICAgICAgIGNvbnN0IHZpZGVvID0gdGhpcy5jYW1lcmFFbGVtZW50LnNyY09iamVjdCBhcyBNZWRpYVN0cmVhbTtcclxuICAgICAgICBpZiAodmlkZW8gJiYgdmlkZW8uZ2V0VHJhY2tzKSB7XHJcbiAgICAgICAgICBjb25zdCBbdHJhY2tzXSA9IHZpZGVvLmdldFRyYWNrcygpO1xyXG4gICAgICAgICAgaWYgKHRyYWNrcykge1xyXG4gICAgICAgICAgICB0cmFja3Muc3RvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYW1lcmFJbWFnZW1DYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQge1xyXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjYW52YXMud2lkdGggPSBQaG90b0NhcHR1cmVDb21wb25lbnQuUEhPVE9fRElNRU5TSU9OUztcclxuICAgIGNhbnZhcy5oZWlnaHQgPSBQaG90b0NhcHR1cmVDb21wb25lbnQuUEhPVE9fRElNRU5TSU9OUztcclxuICAgIGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZSh0aGlzLmNhbWVyYUVsZW1lbnQsIDAsIDAsIFBob3RvQ2FwdHVyZUNvbXBvbmVudC5QSE9UT19ESU1FTlNJT05TLCBQaG90b0NhcHR1cmVDb21wb25lbnQuUEhPVE9fRElNRU5TSU9OUyk7XHJcbiAgICByZXR1cm4gY2FudmFzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { PhotoCaptureComponent } from './photo-capture.component';
3
+ import * as i0 from "@angular/core";
4
+ export class PhotoCaptureModule {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, declarations: [PhotoCaptureComponent], exports: [PhotoCaptureComponent] });
7
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule });
8
+ }
9
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, decorators: [{
10
+ type: NgModule,
11
+ args: [{
12
+ declarations: [PhotoCaptureComponent],
13
+ imports: [],
14
+ exports: [PhotoCaptureComponent]
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tY2FwdHVyZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zYW0tcGhvdG8tY2FwdHVyZS9zcmMvbGliL3Bob3RvLWNhcHR1cmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBUWxFLE1BQU0sT0FBTyxrQkFBa0I7d0dBQWxCLGtCQUFrQjt5R0FBbEIsa0JBQWtCLGlCQUxkLHFCQUFxQixhQUcxQixxQkFBcUI7eUdBRXBCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFOOUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDckMsT0FBTyxFQUFFLEVBQ1I7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGhvdG9DYXB0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi9waG90by1jYXB0dXJlLmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1Bob3RvQ2FwdHVyZUNvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gIF0sXHJcbiAgZXhwb3J0czogW1Bob3RvQ2FwdHVyZUNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBob3RvQ2FwdHVyZU1vZHVsZSB7IH1cclxuIl19
@@ -0,0 +1,48 @@
1
+ import { Injectable, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PhotoCaptureService {
4
+ key = 'key';
5
+ photoTaken = new EventEmitter();
6
+ cameraStop = new EventEmitter();
7
+ cameraStart = new EventEmitter();
8
+ videoElement;
9
+ setKey(key) {
10
+ this.key = key;
11
+ }
12
+ getKey() {
13
+ return this.key;
14
+ }
15
+ setVideoElement(videoElement) {
16
+ this.videoElement = videoElement;
17
+ }
18
+ getVideoElement() {
19
+ return this.videoElement;
20
+ }
21
+ stop() {
22
+ this.cameraStop.emit();
23
+ }
24
+ onStop() {
25
+ return this.cameraStop.asObservable();
26
+ }
27
+ start() {
28
+ this.cameraStart.emit();
29
+ }
30
+ onStart() {
31
+ return this.cameraStart.asObservable();
32
+ }
33
+ takePhoto() {
34
+ this.photoTaken.emit();
35
+ }
36
+ onPhotoTaken() {
37
+ return this.photoTaken.asObservable();
38
+ }
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, providedIn: 'root' });
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, decorators: [{
43
+ type: Injectable,
44
+ args: [{
45
+ providedIn: 'root'
46
+ }]
47
+ }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tY2FwdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FtLXBob3RvLWNhcHR1cmUvc3JjL2xpYi9waG90by1jYXB0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS3pELE1BQU0sT0FBTyxtQkFBbUI7SUFFdEIsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNaLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2hDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pDLFlBQVksQ0FBbUI7SUFFaEMsTUFBTSxDQUFDLEdBQUc7UUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sZUFBZSxDQUFDLFlBQVk7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO3dHQTlDVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaG90b0NhcHR1cmVTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBrZXkgPSAna2V5JztcclxuICBwcml2YXRlIHBob3RvVGFrZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHJpdmF0ZSBjYW1lcmFTdG9wID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHByaXZhdGUgY2FtZXJhU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHJpdmF0ZSB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XHJcblxyXG4gIHB1YmxpYyBzZXRLZXkoa2V5KSB7XHJcbiAgICB0aGlzLmtleSA9IGtleTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRLZXkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlkZW9FbGVtZW50KHZpZGVvRWxlbWVudCkge1xyXG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VmlkZW9FbGVtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlkZW9FbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKSB7XHJcbiAgICB0aGlzLmNhbWVyYVN0b3AuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uU3RvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNhbWVyYVN0b3AuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhcnQoKSB7XHJcbiAgICB0aGlzLmNhbWVyYVN0YXJ0LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblN0YXJ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FtZXJhU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdGFrZVBob3RvKCkge1xyXG4gICAgdGhpcy5waG90b1Rha2VuLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblBob3RvVGFrZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5waG90b1Rha2VuLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Public API Surface of photo-capture
3
+ */
4
+ export * from './lib/photo-capture.service';
5
+ export * from './lib/photo-capture.component';
6
+ export * from './lib/photo-capture.module';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NhbS1waG90by1jYXB0dXJlL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgcGhvdG8tY2FwdHVyZVxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob3RvLWNhcHR1cmUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Bob3RvLWNhcHR1cmUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGhvdG8tY2FwdHVyZS5tb2R1bGUnO1xyXG5cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FtLXNlbmlvci1waG90by1jYXB0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvc2FtLXBob3RvLWNhcHR1cmUvc3JjL3NhbS1zZW5pb3ItcGhvdG8tY2FwdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19
@@ -0,0 +1,226 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Injectable, Component, ViewChild, Input, Output, NgModule } from '@angular/core';
3
+
4
+ class PhotoCaptureService {
5
+ key = 'key';
6
+ photoTaken = new EventEmitter();
7
+ cameraStop = new EventEmitter();
8
+ cameraStart = new EventEmitter();
9
+ videoElement;
10
+ setKey(key) {
11
+ this.key = key;
12
+ }
13
+ getKey() {
14
+ return this.key;
15
+ }
16
+ setVideoElement(videoElement) {
17
+ this.videoElement = videoElement;
18
+ }
19
+ getVideoElement() {
20
+ return this.videoElement;
21
+ }
22
+ stop() {
23
+ this.cameraStop.emit();
24
+ }
25
+ onStop() {
26
+ return this.cameraStop.asObservable();
27
+ }
28
+ start() {
29
+ this.cameraStart.emit();
30
+ }
31
+ onStart() {
32
+ return this.cameraStart.asObservable();
33
+ }
34
+ takePhoto() {
35
+ this.photoTaken.emit();
36
+ }
37
+ onPhotoTaken() {
38
+ return this.photoTaken.asObservable();
39
+ }
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
41
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, providedIn: 'root' });
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureService, decorators: [{
44
+ type: Injectable,
45
+ args: [{
46
+ providedIn: 'root'
47
+ }]
48
+ }] });
49
+
50
+ class PhotoCaptureComponent {
51
+ photoCaptureService;
52
+ static PHOTO_DIMENSIONS = 700;
53
+ camera;
54
+ width = screen.width;
55
+ height = screen.height;
56
+ error = new EventEmitter();
57
+ open = new EventEmitter();
58
+ photoTake = new EventEmitter();
59
+ cameraElement;
60
+ effectiveHeight;
61
+ effectiveWidth;
62
+ cameraConfigConstraints = {
63
+ audio: false,
64
+ video: {
65
+ height: this.height,
66
+ facingMode: {
67
+ ideal: 'user'
68
+ }
69
+ }
70
+ };
71
+ constructor(photoCaptureService) {
72
+ this.photoCaptureService = photoCaptureService;
73
+ }
74
+ ngOnInit() {
75
+ this.photoCaptureService.onStart()
76
+ .subscribe(() => this.cameraStart());
77
+ this.photoCaptureService.onStop()
78
+ .subscribe(() => this.cameraStop());
79
+ this.photoTakeListener();
80
+ }
81
+ cameraStart() {
82
+ if (this.hasGetUserMedia()) {
83
+ this.createCameraElement();
84
+ this.initializeCamera();
85
+ }
86
+ else {
87
+ this.error.emit({
88
+ error: 'browser_not_support',
89
+ message: 'This browser does not support camera features (No getUserMedia)'
90
+ });
91
+ }
92
+ }
93
+ cameraStop() {
94
+ this.finalizeCamera();
95
+ }
96
+ createCameraElement() {
97
+ this.cameraElement = this.camera.nativeElement;
98
+ if (this.cameraElement) {
99
+ this.photoCaptureService.setVideoElement(this.cameraElement);
100
+ this.cameraElement.style.width = `${this.width}px`;
101
+ this.cameraElement.style.height = `${this.height}px`;
102
+ this.cameraElement.onerror = err => this.error.emit(err);
103
+ }
104
+ else {
105
+ this.error.emit({
106
+ error: 'browser_not_retriving_element',
107
+ message: 'The browser not retriving #camera element of browser'
108
+ });
109
+ }
110
+ }
111
+ initializeCamera() {
112
+ navigator.mediaDevices.getUserMedia(this.cameraConfigConstraints)
113
+ .then(mediaStream => {
114
+ this.setCameraElementSrcObject(mediaStream);
115
+ this.cameraElement.onloadedmetadata = () => this.onLoadCameraElement();
116
+ })
117
+ .catch(err => this.error.emit(err));
118
+ }
119
+ hasGetUserMedia() {
120
+ return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
121
+ }
122
+ setCameraElementSrcObject(mediaStream) {
123
+ this.cameraElement.srcObject = mediaStream;
124
+ }
125
+ onLoadCameraElement() {
126
+ this.getCameraElementDimensions();
127
+ this.updateCameraElementDimensions();
128
+ this.open.emit();
129
+ }
130
+ getCameraElementDimensions() {
131
+ this.effectiveHeight = this.height;
132
+ this.effectiveWidth = this.width;
133
+ }
134
+ updateCameraElementDimensions() {
135
+ this.cameraElement.height = this.effectiveHeight;
136
+ this.cameraElement.width = this.effectiveWidth;
137
+ this.cameraElement.style.width = `${this.effectiveWidth}px`;
138
+ this.cameraElement.style.height = `${this.effectiveHeight}px`;
139
+ }
140
+ photoTakeListener() {
141
+ this.photoCaptureService.onPhotoTaken()
142
+ .subscribe(() => {
143
+ this.takePhoto();
144
+ });
145
+ }
146
+ takePhoto() {
147
+ return new Promise(resolve => {
148
+ const canvas = this.getCameraImagemCanvas();
149
+ canvas.toBlob((blob) => {
150
+ this.photoTake.emit({
151
+ blob: blob,
152
+ image: canvas.toDataURL()
153
+ });
154
+ });
155
+ this.finalizeCamera();
156
+ resolve('');
157
+ });
158
+ }
159
+ finalizeCamera() {
160
+ if (this.cameraElement) {
161
+ if (this.cameraElement.srcObject) {
162
+ const video = this.cameraElement.srcObject;
163
+ if (video && video.getTracks) {
164
+ const [tracks] = video.getTracks();
165
+ if (tracks) {
166
+ tracks.stop();
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ getCameraImagemCanvas() {
173
+ const canvas = document.createElement('canvas');
174
+ canvas.width = PhotoCaptureComponent.PHOTO_DIMENSIONS;
175
+ canvas.height = PhotoCaptureComponent.PHOTO_DIMENSIONS;
176
+ canvas.getContext('2d').drawImage(this.cameraElement, 0, 0, PhotoCaptureComponent.PHOTO_DIMENSIONS, PhotoCaptureComponent.PHOTO_DIMENSIONS);
177
+ return canvas;
178
+ }
179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureComponent, deps: [{ token: PhotoCaptureService }], target: i0.ɵɵFactoryTarget.Component });
180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PhotoCaptureComponent, selector: "sam-photo-capture", inputs: { width: "width", height: "height" }, outputs: { error: "error", open: "open", photoTake: "photoTake" }, viewQueries: [{ propertyName: "camera", first: true, predicate: ["camera"], descendants: true }], ngImport: i0, template: `<video #camera autoplay muted class="sam-camera"></video>`, isInline: true });
181
+ }
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureComponent, decorators: [{
183
+ type: Component,
184
+ args: [{
185
+ selector: 'sam-photo-capture',
186
+ template: `<video #camera autoplay muted class="sam-camera"></video>`
187
+ }]
188
+ }], ctorParameters: () => [{ type: PhotoCaptureService }], propDecorators: { camera: [{
189
+ type: ViewChild,
190
+ args: ['camera']
191
+ }], width: [{
192
+ type: Input
193
+ }], height: [{
194
+ type: Input
195
+ }], error: [{
196
+ type: Output
197
+ }], open: [{
198
+ type: Output
199
+ }], photoTake: [{
200
+ type: Output
201
+ }] } });
202
+
203
+ class PhotoCaptureModule {
204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
205
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, declarations: [PhotoCaptureComponent], exports: [PhotoCaptureComponent] });
206
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule });
207
+ }
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PhotoCaptureModule, decorators: [{
209
+ type: NgModule,
210
+ args: [{
211
+ declarations: [PhotoCaptureComponent],
212
+ imports: [],
213
+ exports: [PhotoCaptureComponent]
214
+ }]
215
+ }] });
216
+
217
+ /*
218
+ * Public API Surface of photo-capture
219
+ */
220
+
221
+ /**
222
+ * Generated bundle index. Do not edit.
223
+ */
224
+
225
+ export { PhotoCaptureComponent, PhotoCaptureModule, PhotoCaptureService };
226
+ //# sourceMappingURL=sam-senior-photo-capture.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sam-senior-photo-capture.mjs","sources":["../../../projects/sam-photo-capture/src/lib/photo-capture.service.ts","../../../projects/sam-photo-capture/src/lib/photo-capture.component.ts","../../../projects/sam-photo-capture/src/lib/photo-capture.module.ts","../../../projects/sam-photo-capture/src/public_api.ts","../../../projects/sam-photo-capture/src/sam-senior-photo-capture.ts"],"sourcesContent":["import { Injectable, EventEmitter } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PhotoCaptureService {\r\n\r\n private key = 'key';\r\n private photoTaken = new EventEmitter();\r\n private cameraStop = new EventEmitter();\r\n private cameraStart = new EventEmitter();\r\n private videoElement: HTMLVideoElement;\r\n\r\n public setKey(key) {\r\n this.key = key;\r\n }\r\n\r\n public getKey() {\r\n return this.key;\r\n }\r\n\r\n public setVideoElement(videoElement) {\r\n this.videoElement = videoElement;\r\n }\r\n\r\n public getVideoElement() {\r\n return this.videoElement;\r\n }\r\n\r\n public stop() {\r\n this.cameraStop.emit();\r\n }\r\n\r\n public onStop() {\r\n return this.cameraStop.asObservable();\r\n }\r\n\r\n public start() {\r\n this.cameraStart.emit();\r\n }\r\n\r\n public onStart() {\r\n return this.cameraStart.asObservable();\r\n }\r\n\r\n public takePhoto() {\r\n this.photoTaken.emit();\r\n }\r\n\r\n public onPhotoTaken() {\r\n return this.photoTaken.asObservable();\r\n }\r\n}\r\n","import { Component, ViewChild, ElementRef, Input, Output, EventEmitter, OnInit } from '@angular/core';\r\n\r\nimport { PhotoCaptureService } from './photo-capture.service';\r\n\r\n@Component({\r\n selector: 'sam-photo-capture',\r\n template: `<video #camera autoplay muted class=\"sam-camera\"></video>`\r\n})\r\nexport class PhotoCaptureComponent implements OnInit {\r\n\r\n private static PHOTO_DIMENSIONS = 700;\r\n\r\n @ViewChild('camera') public camera: ElementRef;\r\n\r\n @Input() width = screen.width;\r\n @Input() height = screen.height;\r\n\r\n @Output() error = new EventEmitter();\r\n @Output() open = new EventEmitter();\r\n @Output() photoTake = new EventEmitter();\r\n\r\n private cameraElement: HTMLVideoElement;\r\n private effectiveHeight: number;\r\n private effectiveWidth: number;\r\n\r\n private cameraConfigConstraints: MediaStreamConstraints = {\r\n audio: false,\r\n video: {\r\n height: this.height,\r\n facingMode: {\r\n ideal: 'user'\r\n }\r\n }\r\n };\r\n\r\n constructor(\r\n private photoCaptureService: PhotoCaptureService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.photoCaptureService.onStart()\r\n .subscribe(() => this.cameraStart());\r\n this.photoCaptureService.onStop()\r\n .subscribe(() => this.cameraStop());\r\n this.photoTakeListener();\r\n }\r\n\r\n private cameraStart() {\r\n if (this.hasGetUserMedia()) {\r\n this.createCameraElement();\r\n this.initializeCamera();\r\n } else {\r\n this.error.emit({\r\n error: 'browser_not_support',\r\n message: 'This browser does not support camera features (No getUserMedia)'\r\n });\r\n }\r\n }\r\n\r\n private cameraStop() {\r\n this.finalizeCamera();\r\n }\r\n\r\n private createCameraElement(): void {\r\n this.cameraElement = this.camera.nativeElement as HTMLVideoElement;\r\n if (this.cameraElement) {\r\n this.photoCaptureService.setVideoElement(this.cameraElement);\r\n this.cameraElement.style.width = `${this.width}px`;\r\n this.cameraElement.style.height = `${this.height}px`;\r\n this.cameraElement.onerror = err => this.error.emit(err);\r\n } else {\r\n this.error.emit({\r\n error: 'browser_not_retriving_element',\r\n message: 'The browser not retriving #camera element of browser'\r\n });\r\n }\r\n }\r\n\r\n private initializeCamera(): void {\r\n navigator.mediaDevices.getUserMedia(this.cameraConfigConstraints)\r\n .then(mediaStream => {\r\n this.setCameraElementSrcObject(mediaStream);\r\n this.cameraElement.onloadedmetadata = () =>\r\n this.onLoadCameraElement();\r\n })\r\n .catch(err => this.error.emit(err));\r\n }\r\n\r\n private hasGetUserMedia(): boolean {\r\n return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);\r\n }\r\n\r\n private setCameraElementSrcObject(mediaStream: MediaStream): void {\r\n this.cameraElement.srcObject = mediaStream;\r\n }\r\n\r\n private onLoadCameraElement(): void {\r\n this.getCameraElementDimensions();\r\n this.updateCameraElementDimensions();\r\n this.open.emit();\r\n }\r\n\r\n private getCameraElementDimensions() {\r\n this.effectiveHeight = this.height;\r\n this.effectiveWidth = this.width;\r\n }\r\n\r\n public updateCameraElementDimensions() {\r\n this.cameraElement.height = this.effectiveHeight;\r\n this.cameraElement.width = this.effectiveWidth;\r\n this.cameraElement.style.width = `${this.effectiveWidth}px`;\r\n this.cameraElement.style.height = `${this.effectiveHeight}px`;\r\n }\r\n\r\n private photoTakeListener(): void {\r\n this.photoCaptureService.onPhotoTaken()\r\n .subscribe(() => {\r\n this.takePhoto();\r\n });\r\n }\r\n\r\n private takePhoto() {\r\n return new Promise(resolve => {\r\n const canvas = this.getCameraImagemCanvas();\r\n canvas.toBlob((blob) => {\r\n this.photoTake.emit({\r\n blob: blob,\r\n image: canvas.toDataURL()\r\n });\r\n });\r\n this.finalizeCamera();\r\n resolve('');\r\n });\r\n }\r\n\r\n private finalizeCamera() {\r\n if (this.cameraElement) {\r\n if (this.cameraElement.srcObject) {\r\n const video = this.cameraElement.srcObject as MediaStream;\r\n if (video && video.getTracks) {\r\n const [tracks] = video.getTracks();\r\n if (tracks) {\r\n tracks.stop();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getCameraImagemCanvas(): HTMLCanvasElement {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = PhotoCaptureComponent.PHOTO_DIMENSIONS;\r\n canvas.height = PhotoCaptureComponent.PHOTO_DIMENSIONS;\r\n canvas.getContext('2d').drawImage(this.cameraElement, 0, 0, PhotoCaptureComponent.PHOTO_DIMENSIONS, PhotoCaptureComponent.PHOTO_DIMENSIONS);\r\n return canvas;\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { PhotoCaptureComponent } from './photo-capture.component';\r\n\r\n@NgModule({\r\n declarations: [PhotoCaptureComponent],\r\n imports: [\r\n ],\r\n exports: [PhotoCaptureComponent]\r\n})\r\nexport class PhotoCaptureModule { }\r\n","/*\r\n * Public API Surface of photo-capture\r\n */\r\n\r\nexport * from './lib/photo-capture.service';\r\nexport * from './lib/photo-capture.component';\r\nexport * from './lib/photo-capture.module';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.PhotoCaptureService"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@sam-senior/photo-capture" />
5
+ export * from './public_api';
@@ -1,31 +1,34 @@
1
- import { ElementRef, EventEmitter, OnInit } from '@angular/core';
2
- import { PhotoCaptureService } from './photo-capture.service';
3
- export declare class PhotoCaptureComponent implements OnInit {
4
- private photoCaptureService;
5
- private static PHOTO_DIMENSIONS;
6
- camera: ElementRef;
7
- width: number;
8
- height: number;
9
- error: EventEmitter<{}>;
10
- open: EventEmitter<{}>;
11
- photoTake: EventEmitter<{}>;
12
- private cameraElement;
13
- private effectiveHeight;
14
- private effectiveWidth;
15
- private cameraConfigConstraints;
16
- constructor(photoCaptureService: PhotoCaptureService);
17
- ngOnInit(): void;
18
- private cameraStart;
19
- private cameraStop;
20
- private createCameraElement;
21
- private initializeCamera;
22
- private hasGetUserMedia;
23
- private setCameraElementSrcObject;
24
- private onLoadCameraElement;
25
- private getCameraElementDimensions;
26
- updateCameraElementDimensions(): void;
27
- private photoTakeListener;
28
- private takePhoto;
29
- private finalizeCamera;
30
- private getCameraImagemCanvas;
31
- }
1
+ import { ElementRef, EventEmitter, OnInit } from '@angular/core';
2
+ import { PhotoCaptureService } from './photo-capture.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class PhotoCaptureComponent implements OnInit {
5
+ private photoCaptureService;
6
+ private static PHOTO_DIMENSIONS;
7
+ camera: ElementRef;
8
+ width: number;
9
+ height: number;
10
+ error: EventEmitter<any>;
11
+ open: EventEmitter<any>;
12
+ photoTake: EventEmitter<any>;
13
+ private cameraElement;
14
+ private effectiveHeight;
15
+ private effectiveWidth;
16
+ private cameraConfigConstraints;
17
+ constructor(photoCaptureService: PhotoCaptureService);
18
+ ngOnInit(): void;
19
+ private cameraStart;
20
+ private cameraStop;
21
+ private createCameraElement;
22
+ private initializeCamera;
23
+ private hasGetUserMedia;
24
+ private setCameraElementSrcObject;
25
+ private onLoadCameraElement;
26
+ private getCameraElementDimensions;
27
+ updateCameraElementDimensions(): void;
28
+ private photoTakeListener;
29
+ private takePhoto;
30
+ private finalizeCamera;
31
+ private getCameraImagemCanvas;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhotoCaptureComponent, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhotoCaptureComponent, "sam-photo-capture", never, { "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; }, { "error": "error"; "open": "open"; "photoTake": "photoTake"; }, never, never, false, never>;
34
+ }
@@ -1,2 +1,7 @@
1
- export declare class PhotoCaptureModule {
2
- }
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./photo-capture.component";
3
+ export declare class PhotoCaptureModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhotoCaptureModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PhotoCaptureModule, [typeof i1.PhotoCaptureComponent], never, [typeof i1.PhotoCaptureComponent]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<PhotoCaptureModule>;
7
+ }
@@ -1,17 +1,20 @@
1
- export declare class PhotoCaptureService {
2
- private key;
3
- private photoTaken;
4
- private cameraStop;
5
- private cameraStart;
6
- private videoElement;
7
- setKey(key: any): void;
8
- getKey(): string;
9
- setVideoElement(videoElement: any): void;
10
- getVideoElement(): HTMLVideoElement;
11
- stop(): void;
12
- onStop(): import("rxjs").Observable<{}>;
13
- start(): void;
14
- onStart(): import("rxjs").Observable<{}>;
15
- takePhoto(): void;
16
- onPhotoTaken(): import("rxjs").Observable<{}>;
17
- }
1
+ import * as i0 from "@angular/core";
2
+ export declare class PhotoCaptureService {
3
+ private key;
4
+ private photoTaken;
5
+ private cameraStop;
6
+ private cameraStart;
7
+ private videoElement;
8
+ setKey(key: any): void;
9
+ getKey(): string;
10
+ setVideoElement(videoElement: any): void;
11
+ getVideoElement(): HTMLVideoElement;
12
+ stop(): void;
13
+ onStop(): import("rxjs").Observable<any>;
14
+ start(): void;
15
+ onStart(): import("rxjs").Observable<any>;
16
+ takePhoto(): void;
17
+ onPhotoTaken(): import("rxjs").Observable<any>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhotoCaptureService, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<PhotoCaptureService>;
20
+ }