@sam-senior/photo-capture 1.2.4 → 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.
- package/esm2022/lib/photo-capture.component.mjs +156 -0
- package/esm2022/lib/photo-capture.module.mjs +17 -0
- package/esm2022/lib/photo-capture.service.mjs +48 -0
- package/esm2022/public_api.mjs +7 -0
- package/esm2022/sam-senior-photo-capture.mjs +5 -0
- package/fesm2022/sam-senior-photo-capture.mjs +226 -0
- package/fesm2022/sam-senior-photo-capture.mjs.map +1 -0
- package/{sam-senior-photo-capture.d.ts → index.d.ts} +5 -4
- package/lib/photo-capture.component.d.ts +34 -31
- package/lib/photo-capture.module.d.ts +7 -2
- package/lib/photo-capture.service.d.ts +20 -17
- package/package.json +21 -16
- package/public_api.d.ts +3 -3
- package/bundles/sam-senior-photo-capture.umd.js +0 -489
- package/bundles/sam-senior-photo-capture.umd.js.map +0 -1
- package/bundles/sam-senior-photo-capture.umd.min.js +0 -2
- package/bundles/sam-senior-photo-capture.umd.min.js.map +0 -1
- package/esm2015/lib/photo-capture.component.js +0 -287
- package/esm2015/lib/photo-capture.module.js +0 -16
- package/esm2015/lib/photo-capture.service.js +0 -110
- package/esm2015/public_api.js +0 -11
- package/esm2015/sam-senior-photo-capture.js +0 -9
- package/esm5/lib/photo-capture.component.js +0 -349
- package/esm5/lib/photo-capture.module.js +0 -20
- package/esm5/lib/photo-capture.service.js +0 -144
- package/esm5/public_api.js +0 -11
- package/esm5/sam-senior-photo-capture.js +0 -9
- package/fesm2015/sam-senior-photo-capture.js +0 -351
- package/fesm2015/sam-senior-photo-capture.js.map +0 -1
- package/fesm5/sam-senior-photo-capture.js +0 -448
- package/fesm5/sam-senior-photo-capture.js.map +0 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvdG8tY2FwdHVyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zYW0tcGhvdG8tY2FwdHVyZS9zcmMvbGliL3Bob3RvLWNhcHR1cmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFRdEcsTUFBTSxPQUFPLHFCQUFxQjtJQTRCdEI7SUExQkYsTUFBTSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztJQUVWLE1BQU0sQ0FBYTtJQUV0QyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNyQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUV0QixLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQixJQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMxQixTQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVqQyxhQUFhLENBQW1CO0lBQ2hDLGVBQWUsQ0FBUztJQUN4QixjQUFjLENBQVM7SUFFdkIsdUJBQXVCLEdBQTJCO1FBQ3hELEtBQUssRUFBRSxLQUFLO1FBQ1osS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsTUFBTTthQUNkO1NBQ0Y7S0FDRixDQUFDO0lBRUYsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtJQUM5QyxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUU7YUFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFB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QUksS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsZ0JBQWdCLENBQUM7UUFDdEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1SSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQW5KVSxxQkFBcUI7NEZBQXJCLHFCQUFxQiw0UUFGdEIsMkRBQTJEOzs0RkFFMUQscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSwyREFBMkQ7aUJBQ3RFO3dGQUs2QixNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLFFBQVE7Z0JBRVYsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFBob3RvQ2FwdHVyZVNlcnZpY2UgfSBmcm9tICcuL3Bob3RvLWNhcHR1cmUuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhbS1waG90by1jYXB0dXJlJyxcclxuICB0ZW1wbGF0ZTogYDx2aWRlbyAjY2FtZXJhIGF1dG9wbGF5IG11dGVkIGNsYXNzPVwic2FtLWNhbWVyYVwiPjwvdmlkZW8+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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
private
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private
|
|
23
|
-
private
|
|
24
|
-
private
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
private
|
|
30
|
-
private
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
private
|
|
4
|
-
private
|
|
5
|
-
private
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
+
}
|