@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.
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 -16
  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
@@ -1,351 +0,0 @@
1
- import { Injectable, EventEmitter, NgModule, Component, ViewChild, Input, Output, ɵɵdefineInjectable } from '@angular/core';
2
-
3
- /**
4
- * @fileoverview added by tsickle
5
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6
- */
7
- class PhotoCaptureService {
8
- constructor() {
9
- this.key = 'key';
10
- this.photoTaken = new EventEmitter();
11
- this.cameraStop = new EventEmitter();
12
- this.cameraStart = new EventEmitter();
13
- }
14
- /**
15
- * @param {?} key
16
- * @return {?}
17
- */
18
- setKey(key) {
19
- this.key = key;
20
- }
21
- /**
22
- * @return {?}
23
- */
24
- getKey() {
25
- return this.key;
26
- }
27
- /**
28
- * @param {?} videoElement
29
- * @return {?}
30
- */
31
- setVideoElement(videoElement) {
32
- this.videoElement = videoElement;
33
- }
34
- /**
35
- * @return {?}
36
- */
37
- getVideoElement() {
38
- return this.videoElement;
39
- }
40
- /**
41
- * @return {?}
42
- */
43
- stop() {
44
- this.cameraStop.emit();
45
- }
46
- /**
47
- * @return {?}
48
- */
49
- onStop() {
50
- return this.cameraStop.asObservable();
51
- }
52
- /**
53
- * @return {?}
54
- */
55
- start() {
56
- this.cameraStart.emit();
57
- }
58
- /**
59
- * @return {?}
60
- */
61
- onStart() {
62
- return this.cameraStart.asObservable();
63
- }
64
- /**
65
- * @return {?}
66
- */
67
- takePhoto() {
68
- this.photoTaken.emit();
69
- }
70
- /**
71
- * @return {?}
72
- */
73
- onPhotoTaken() {
74
- return this.photoTaken.asObservable();
75
- }
76
- }
77
- PhotoCaptureService.decorators = [
78
- { type: Injectable, args: [{
79
- providedIn: 'root'
80
- },] }
81
- ];
82
- /** @nocollapse */ PhotoCaptureService.ɵprov = ɵɵdefineInjectable({ factory: function PhotoCaptureService_Factory() { return new PhotoCaptureService(); }, token: PhotoCaptureService, providedIn: "root" });
83
-
84
- /**
85
- * @fileoverview added by tsickle
86
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
87
- */
88
- class PhotoCaptureComponent {
89
- /**
90
- * @param {?} photoCaptureService
91
- */
92
- constructor(photoCaptureService) {
93
- this.photoCaptureService = photoCaptureService;
94
- this.width = screen.width;
95
- this.height = screen.height;
96
- this.error = new EventEmitter();
97
- this.open = new EventEmitter();
98
- this.photoTake = new EventEmitter();
99
- this.cameraConfigConstraints = {
100
- audio: false,
101
- video: {
102
- height: this.height,
103
- facingMode: {
104
- ideal: 'user'
105
- }
106
- }
107
- };
108
- }
109
- /**
110
- * @return {?}
111
- */
112
- ngOnInit() {
113
- this.photoCaptureService.onStart()
114
- .subscribe((/**
115
- * @return {?}
116
- */
117
- () => this.cameraStart()));
118
- this.photoCaptureService.onStop()
119
- .subscribe((/**
120
- * @return {?}
121
- */
122
- () => this.cameraStop()));
123
- this.photoTakeListener();
124
- }
125
- /**
126
- * @private
127
- * @return {?}
128
- */
129
- cameraStart() {
130
- if (this.hasGetUserMedia()) {
131
- this.createCameraElement();
132
- this.initializeCamera();
133
- }
134
- else {
135
- this.error.emit({
136
- error: 'browser_not_support',
137
- message: 'This browser does not support camera features (No getUserMedia)'
138
- });
139
- }
140
- }
141
- /**
142
- * @private
143
- * @return {?}
144
- */
145
- cameraStop() {
146
- this.finalizeCamera();
147
- }
148
- /**
149
- * @private
150
- * @return {?}
151
- */
152
- createCameraElement() {
153
- this.cameraElement = (/** @type {?} */ (this.camera.nativeElement));
154
- if (this.cameraElement) {
155
- this.photoCaptureService.setVideoElement(this.cameraElement);
156
- this.cameraElement.style.width = `${this.width}px`;
157
- this.cameraElement.style.height = `${this.height}px`;
158
- this.cameraElement.onerror = (/**
159
- * @param {?} err
160
- * @return {?}
161
- */
162
- err => this.error.emit(err));
163
- }
164
- else {
165
- this.error.emit({
166
- error: 'browser_not_retriving_element',
167
- message: 'The browser not retriving #camera element of browser'
168
- });
169
- }
170
- }
171
- /**
172
- * @private
173
- * @return {?}
174
- */
175
- initializeCamera() {
176
- navigator.mediaDevices.getUserMedia(this.cameraConfigConstraints)
177
- .then((/**
178
- * @param {?} mediaStream
179
- * @return {?}
180
- */
181
- mediaStream => {
182
- this.setCameraElementSrcObject(mediaStream);
183
- this.cameraElement.onloadedmetadata = (/**
184
- * @return {?}
185
- */
186
- () => this.onLoadCameraElement());
187
- }))
188
- .catch((/**
189
- * @param {?} err
190
- * @return {?}
191
- */
192
- err => this.error.emit(err)));
193
- }
194
- /**
195
- * @private
196
- * @return {?}
197
- */
198
- hasGetUserMedia() {
199
- return !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
200
- }
201
- /**
202
- * @private
203
- * @param {?} mediaStream
204
- * @return {?}
205
- */
206
- setCameraElementSrcObject(mediaStream) {
207
- this.cameraElement.srcObject = mediaStream;
208
- }
209
- /**
210
- * @private
211
- * @return {?}
212
- */
213
- onLoadCameraElement() {
214
- this.getCameraElementDimensions();
215
- this.updateCameraElementDimensions();
216
- this.open.emit();
217
- }
218
- /**
219
- * @private
220
- * @return {?}
221
- */
222
- getCameraElementDimensions() {
223
- this.effectiveHeight = this.height;
224
- this.effectiveWidth = this.width;
225
- }
226
- /**
227
- * @return {?}
228
- */
229
- updateCameraElementDimensions() {
230
- this.cameraElement.height = this.effectiveHeight;
231
- this.cameraElement.width = this.effectiveWidth;
232
- this.cameraElement.style.width = `${this.effectiveWidth}px`;
233
- this.cameraElement.style.height = `${this.effectiveHeight}px`;
234
- }
235
- /**
236
- * @private
237
- * @return {?}
238
- */
239
- photoTakeListener() {
240
- this.photoCaptureService.onPhotoTaken()
241
- .subscribe((/**
242
- * @return {?}
243
- */
244
- () => {
245
- this.takePhoto();
246
- }));
247
- }
248
- /**
249
- * @private
250
- * @return {?}
251
- */
252
- takePhoto() {
253
- return new Promise((/**
254
- * @param {?} resolve
255
- * @return {?}
256
- */
257
- resolve => {
258
- /** @type {?} */
259
- const canvas = this.getCameraImagemCanvas();
260
- canvas.toBlob((/**
261
- * @param {?} blob
262
- * @return {?}
263
- */
264
- (blob) => {
265
- this.photoTake.emit({
266
- blob: blob,
267
- image: canvas.toDataURL()
268
- });
269
- }));
270
- this.finalizeCamera();
271
- resolve('');
272
- }));
273
- }
274
- /**
275
- * @private
276
- * @return {?}
277
- */
278
- finalizeCamera() {
279
- if (this.cameraElement) {
280
- if (this.cameraElement.srcObject) {
281
- /** @type {?} */
282
- const video = (/** @type {?} */ (this.cameraElement.srcObject));
283
- if (video && video.getTracks) {
284
- const [tracks] = video.getTracks();
285
- if (tracks) {
286
- tracks.stop();
287
- }
288
- }
289
- }
290
- }
291
- }
292
- /**
293
- * @private
294
- * @return {?}
295
- */
296
- getCameraImagemCanvas() {
297
- /** @type {?} */
298
- const canvas = document.createElement('canvas');
299
- canvas.width = PhotoCaptureComponent.PHOTO_DIMENSIONS;
300
- canvas.height = PhotoCaptureComponent.PHOTO_DIMENSIONS;
301
- canvas.getContext('2d').drawImage(this.cameraElement, 0, 0, PhotoCaptureComponent.PHOTO_DIMENSIONS, PhotoCaptureComponent.PHOTO_DIMENSIONS);
302
- return canvas;
303
- }
304
- }
305
- PhotoCaptureComponent.PHOTO_DIMENSIONS = 700;
306
- PhotoCaptureComponent.decorators = [
307
- { type: Component, args: [{
308
- selector: 'sam-photo-capture',
309
- template: `<video #camera autoplay muted class="sam-camera"></video>`
310
- }] }
311
- ];
312
- /** @nocollapse */
313
- PhotoCaptureComponent.ctorParameters = () => [
314
- { type: PhotoCaptureService }
315
- ];
316
- PhotoCaptureComponent.propDecorators = {
317
- camera: [{ type: ViewChild, args: ['camera',] }],
318
- width: [{ type: Input }],
319
- height: [{ type: Input }],
320
- error: [{ type: Output }],
321
- open: [{ type: Output }],
322
- photoTake: [{ type: Output }]
323
- };
324
-
325
- /**
326
- * @fileoverview added by tsickle
327
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
328
- */
329
- class PhotoCaptureModule {
330
- }
331
- PhotoCaptureModule.decorators = [
332
- { type: NgModule, args: [{
333
- declarations: [PhotoCaptureComponent],
334
- imports: [],
335
- exports: [PhotoCaptureComponent]
336
- },] }
337
- ];
338
-
339
- /**
340
- * @fileoverview added by tsickle
341
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
342
- */
343
-
344
- /**
345
- * @fileoverview added by tsickle
346
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
347
- */
348
-
349
- export { PhotoCaptureService, PhotoCaptureComponent, PhotoCaptureModule };
350
-
351
- //# sourceMappingURL=sam-senior-photo-capture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sam-senior-photo-capture.js.map","sources":["ng://@sam-senior/photo-capture/lib/photo-capture.service.ts","ng://@sam-senior/photo-capture/lib/photo-capture.component.ts","ng://@sam-senior/photo-capture/lib/photo-capture.module.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"],"names":[],"mappings":"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"}