ngx-scandoc 0.0.1 → 1.0.1

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 (71) hide show
  1. package/core/app.worker.d.ts +1 -0
  2. package/core/components/components.module.d.ts +8 -0
  3. package/core/components/webcam/domain/webcam-image.d.ts +35 -0
  4. package/core/components/webcam/domain/webcam-init-error.d.ts +4 -0
  5. package/core/components/webcam/domain/webcam-mirror-properties.d.ts +3 -0
  6. package/core/components/webcam/util/webcam.util.d.ts +8 -0
  7. package/core/components/webcam/webcam/webcam.component.d.ts +202 -0
  8. package/core/components/webcam/webcam.module.d.ts +9 -0
  9. package/core/pipes/pipes.module.d.ts +7 -0
  10. package/core/pipes/safeResourceUrl.pipe.d.ts +10 -0
  11. package/core/shared/material.module.d.ts +28 -0
  12. package/dialogs/components/blank/blank.component.d.ts +17 -0
  13. package/dialogs/components/confirm/confirm.component.d.ts +30 -0
  14. package/dialogs/components/loading/loading.component.d.ts +5 -0
  15. package/dialogs/components/scan-mobile/scan-mobile.component.d.ts +16 -0
  16. package/dialogs/components/scan-profile/scan-profile.component.d.ts +124 -0
  17. package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +83 -0
  18. package/dialogs/dialogs.core.provider.d.ts +18 -0
  19. package/dialogs/dialogs.module.d.ts +21 -0
  20. package/esm2020/core/app.worker.mjs +236 -0
  21. package/esm2020/core/components/components.module.mjs +18 -0
  22. package/esm2020/core/components/webcam/domain/webcam-image.mjs +58 -0
  23. package/esm2020/core/components/webcam/domain/webcam-init-error.mjs +3 -0
  24. package/esm2020/core/components/webcam/domain/webcam-mirror-properties.mjs +3 -0
  25. package/esm2020/core/components/webcam/util/webcam.util.mjs +48 -0
  26. package/esm2020/core/components/webcam/webcam/webcam.component.mjs +861 -0
  27. package/esm2020/core/components/webcam/webcam.module.mjs +22 -0
  28. package/esm2020/core/pipes/pipes.module.mjs +19 -0
  29. package/esm2020/core/pipes/safeResourceUrl.pipe.mjs +20 -0
  30. package/esm2020/core/shared/material.module.mjs +162 -0
  31. package/esm2020/dialogs/components/blank/blank.component.mjs +47 -0
  32. package/esm2020/dialogs/components/confirm/confirm.component.mjs +53 -0
  33. package/esm2020/dialogs/components/loading/loading.component.mjs +12 -0
  34. package/esm2020/dialogs/components/scan-mobile/scan-mobile.component.mjs +43 -0
  35. package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +756 -0
  36. package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +392 -0
  37. package/esm2020/dialogs/dialogs.core.provider.mjs +100 -0
  38. package/esm2020/dialogs/dialogs.module.mjs +89 -0
  39. package/esm2020/forms/form.module.mjs +87 -0
  40. package/esm2020/forms/types/avatar.type.mjs +53 -0
  41. package/esm2020/forms/types/profile.image.type.mjs +54 -0
  42. package/esm2020/forms/types/title.type.mjs +60 -0
  43. package/esm2020/lib/ngx-scandoc.module.mjs +28 -11
  44. package/esm2020/providers/auth.provider.mjs +57 -0
  45. package/esm2020/providers/interceptor.provider.mjs +61 -0
  46. package/esm2020/providers/scan.form.mjs +386 -0
  47. package/esm2020/providers/scan.provider.mjs +490 -0
  48. package/esm2020/providers/translation.provider.mjs +50 -0
  49. package/esm2020/providers/webrtc.provider.mjs +58 -0
  50. package/esm2020/public-api.mjs +22 -4
  51. package/fesm2015/ngx-scandoc.mjs +4178 -32
  52. package/fesm2015/ngx-scandoc.mjs.map +1 -1
  53. package/fesm2020/ngx-scandoc.mjs +4154 -32
  54. package/fesm2020/ngx-scandoc.mjs.map +1 -1
  55. package/forms/form.module.d.ts +18 -0
  56. package/forms/types/avatar.type.d.ts +14 -0
  57. package/forms/types/profile.image.type.d.ts +14 -0
  58. package/forms/types/title.type.d.ts +12 -0
  59. package/lib/ngx-scandoc.module.d.ts +20 -2
  60. package/package.json +6 -2
  61. package/providers/auth.provider.d.ts +21 -0
  62. package/providers/interceptor.provider.d.ts +13 -0
  63. package/providers/scan.form.d.ts +13 -0
  64. package/providers/scan.provider.d.ts +239 -0
  65. package/providers/translation.provider.d.ts +9 -0
  66. package/providers/webrtc.provider.d.ts +11 -0
  67. package/public-api.d.ts +21 -3
  68. package/esm2020/lib/ngx-scandoc.component.mjs +0 -22
  69. package/esm2020/lib/ngx-scandoc.service.mjs +0 -14
  70. package/lib/ngx-scandoc.component.d.ts +0 -8
  71. package/lib/ngx-scandoc.service.d.ts +0 -6
@@ -0,0 +1,21 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./components/scan-profile/scan-profile.component";
3
+ import * as i2 from "./components/blank/blank.component";
4
+ import * as i3 from "./components/loading/loading.component";
5
+ import * as i4 from "./components/confirm/confirm.component";
6
+ import * as i5 from "./components/scan-mobile/scan-mobile.component";
7
+ import * as i6 from "./components/scan-selfie/scan-selfie.component";
8
+ import * as i7 from "angularx-qrcode";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "@angular/common";
11
+ import * as i10 from "../forms/form.module";
12
+ import * as i11 from "@ngx-translate/core";
13
+ import * as i12 from "../core/shared/material.module";
14
+ import * as i13 from "../core/components/components.module";
15
+ import * as i14 from "../core/pipes/pipes.module";
16
+ import * as i15 from "@angular/flex-layout";
17
+ export declare class DialogsModule {
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogsModule, never>;
19
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DialogsModule, [typeof i1.ScanProfileComponent, typeof i2.BlankComponent, typeof i3.LoadingComponent, typeof i4.ConfirmComponent, typeof i5.ScanMobileComponent, typeof i6.ScanSelfieComponent], [typeof i7.QRCodeModule, typeof i8.ReactiveFormsModule, typeof i9.CommonModule, typeof i8.FormsModule, typeof i10.AppFormModule, typeof i11.TranslateModule, typeof i12.MaterialModule, typeof i13.CoreComponentsModule, typeof i14.CorePipesModule, typeof i15.FlexModule, typeof i15.FlexLayoutModule], [typeof i1.ScanProfileComponent, typeof i3.LoadingComponent, typeof i2.BlankComponent, typeof i5.ScanMobileComponent, typeof i12.MaterialModule, typeof i6.ScanSelfieComponent]>;
20
+ static ɵinj: i0.ɵɵInjectorDeclaration<DialogsModule>;
21
+ }
@@ -0,0 +1,236 @@
1
+ export const workertext = `
2
+
3
+
4
+ let readStream = true;
5
+ async function blobToBase64(blob) {
6
+ return new Promise((resolve, _) => {
7
+ const reader = new FileReader();
8
+ reader.onloadend = () => resolve(reader.result);
9
+ reader.readAsDataURL(blob);
10
+ });
11
+ }
12
+ async function delay(ms) {
13
+ return new Promise((resolve) =>
14
+ ms > 0 ? setTimeout(resolve, ms) : resolve(0)
15
+ );
16
+ }
17
+
18
+ function calculateDelay(startTime) {
19
+ const endTime = Date.now();
20
+ // difference in ms
21
+ const dt = endTime - startTime;
22
+ const delay = 100 - dt;
23
+ // console.log('[WORKER TIME]', dt, '[DELAY 100-x]', delay);
24
+ return delay > 4 ? delay : 0;
25
+ }
26
+ async function parseFrame(frameStream, trackSettings) {
27
+ const reader = frameStream.getReader();
28
+
29
+ while (readStream) {
30
+ const time = Date.now();
31
+ const result = await reader.read();
32
+ if (result.done) break;
33
+
34
+ const frameFromCamera = result.value;
35
+
36
+ await parseFrameFromCamera(frameFromCamera, trackSettings);
37
+ // wait
38
+ await delay(calculateDelay(time));
39
+ }
40
+ }
41
+
42
+ async function parseFrameFast(frameStream, trackSettings) {
43
+ console.warn('FAST', performance.now());
44
+ const reader = frameStream.getReader();
45
+ const { width, height } = trackSettings;
46
+ const offscreenSmall = new OffscreenCanvas(384, 384);
47
+ const context = offscreenSmall.getContext('2d');
48
+ let time = 0;
49
+ while (true) {
50
+ // const t0 = performance.now();
51
+ // console.time('result');
52
+ const result = reader.read();
53
+ // console.timeEnd('result');
54
+ if (result.done) break;
55
+
56
+ const frameFromCamera = result.value;
57
+ // console.log(frameFromCamera.timestamp);
58
+
59
+ // const tt = frameFromCamera.timestamp - time;
60
+ // console.log(tt / 1000);
61
+ // time = frameFromCamera.timestamp;
62
+
63
+ // console.time('bitmap');
64
+ const bitmap = await createImageBitmap(frameFromCamera, {
65
+ premultiplyAlpha: 'default',
66
+ });
67
+ console.warn(new Date().getTime());
68
+ // console.timeEnd('bitmap');
69
+
70
+ // context.clearRect(0, 0, 384, 384);
71
+ // console.time('draw');
72
+ // context.drawImage(bitmap, 0, 0, width, height, 0, 0, 384, 384);
73
+ // console.timeEnd('draw');
74
+ // console.time('transfer');
75
+ // const bitmapSmall = offscreenSmall.transferToImageBitmap();
76
+ // console.timeEnd('transfer');
77
+
78
+ frameFromCamera.close();
79
+ // //
80
+ // const t1 = performance.now();
81
+
82
+
83
+ // await parseFrameFromCamera(frameFromCamera, trackSettings);
84
+ }
85
+ }
86
+
87
+ async function parseFrameFromCamera(frameFromCamera, trackSettings) {
88
+ const { width, height } = trackSettings;
89
+ const offscreenSmall = new OffscreenCanvas(384, 384);
90
+ // console.time('bit2');
91
+ const bitmap = await createImageBitmap(frameFromCamera, {
92
+ premultiplyAlpha: 'default',
93
+ });
94
+ // console.timeEnd('bit2');
95
+ const context = offscreenSmall.getContext('2d');
96
+
97
+ // console.time('buffer');
98
+ // const buffer = new Uint8Array(frameFromCamera.allocationSize());
99
+ // let layout = await frameFromCamera.copyTo(buffer);
100
+
101
+ // const base64 = await blobToBase64(new Blob([buffer]));
102
+ // console.log(base64)
103
+ // console.timeEnd('buffer');
104
+
105
+ if (context) {
106
+ context.imageSmoothingEnabled = false;
107
+
108
+ // let videoFrame2 = frameFromCamera.clone();
109
+
110
+ // createImageBitmap();
111
+
112
+ // console.time('clear');
113
+ // context.clearRect(0, 0, width, height);
114
+ // console.timeEnd('clear');
115
+ // console.time('draw');
116
+ context.drawImage(bitmap, 0, 0, width, height, 0, 0, 384, 384);
117
+ // console.timeEnd('draw');
118
+ // context.drawImage(bit, 0, 0);
119
+ // bit2.close();
120
+ // bit.close();
121
+ // console.timeEnd('draw');
122
+ // console.time('capture');
123
+
124
+ // const bitmapsmall = offscreenSmall.transferToImageBitmap();
125
+
126
+ // const imageData = context.getImageData(0, 0, 384, 384);
127
+ // console.timeEnd('capture');
128
+ // console.time('blob');
129
+ const resized = await offscreenSmall.convertToBlob({
130
+ type: 'image/jpeg',
131
+ });
132
+ // console.timeEnd('blob');
133
+ // console.log(resized);
134
+ // console.time('base64');
135
+ const base64 = await blobToBase64(resized);
136
+ //console.timeEnd('base64');
137
+ // console.log(blob);
138
+
139
+ // console.time('convert')
140
+ // await convert(bitmap, trackSettings)
141
+ // console.timeEnd('convert');
142
+ // console.log(
143
+ // '%c ',
144
+ // 'font-size:384px; background:url('+blob+') no-repeat;'
145
+ // );
146
+
147
+ // console.timeEnd('blob');
148
+ postMessage({ base64, bitmap }, [bitmap]);
149
+ // videoFrame2.close();
150
+ }
151
+ frameFromCamera.close();
152
+ }
153
+
154
+ async function convert(image, trackSettings) {
155
+ const { width, height } = trackSettings;
156
+
157
+ const offscreenSmall = new OffscreenCanvas(width, height);
158
+
159
+ const context = offscreenSmall.getContext('2d');
160
+
161
+ // console.time('buffer');
162
+ // const buffer = new Uint8Array(frameFromCamera.allocationSize());
163
+ // let layout = await frameFromCamera.copyTo(buffer);
164
+ // console.timeEnd('buffer');
165
+
166
+ if (context) {
167
+ context.imageSmoothingEnabled = false;
168
+ // let videoFrame2 = frameFromCamera.clone();
169
+ console.warn(image);
170
+ // createImageBitmap();
171
+
172
+ // console.time('clear');
173
+ // context.clearRect(0, 0, width, height);
174
+ // console.timeEnd('clear');
175
+
176
+ context.drawImage(image, 0, 0);
177
+ // context.drawImage(bit, 0, 0);
178
+ // image.close();
179
+ // console.timeEnd('drawB');
180
+ console.time('blob2');
181
+ const resized = await offscreenSmall.convertToBlob({
182
+ type: 'image/jpeg',
183
+ });
184
+ console.timeEnd('blob2');
185
+
186
+ // image.close();
187
+ // console.time('base64');
188
+ const base64 = await blobToBase64(resized);
189
+
190
+ // console.log(blob);
191
+
192
+ // console.log(
193
+ // '%c ',
194
+ // 'font-size:384px; background:url(' + base64 + ') no-repeat;'
195
+ // );
196
+
197
+ // console.timeEnd('base64');
198
+ //postMessage({ type: 'convert', base64 });
199
+ }
200
+ }
201
+ addEventListener('message', ({ data }) => {
202
+ const { type, image, frameStream, trackSettings } = data;
203
+ // console.log(data);
204
+ switch (type) {
205
+ case 'start':
206
+ readStream = true;
207
+ parseFrame(frameStream, trackSettings);
208
+ break;
209
+
210
+ case 'fast':
211
+ readStream = true;
212
+ parseFrameFast(frameStream, trackSettings);
213
+ break;
214
+
215
+ case 'stop':
216
+ console.warn('STOP WORKER');
217
+ readStream = false;
218
+ break;
219
+
220
+ case 'convert':
221
+ convert(image, trackSettings);
222
+ break;
223
+ }
224
+
225
+ // const canvas = document.createElement('canvas');
226
+ // const ctx = canvas.getContext('2d');
227
+
228
+ // if (data.canvas) {
229
+ // postMessage('ok');
230
+ // } else {
231
+
232
+ // postMessage(response);
233
+ // }
234
+ });
235
+ `;
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLndvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zY2FuZG9jL3NyYy9jb3JlL2FwcC53b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0EwT3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgd29ya2VydGV4dCA9IGBcblxuXG5sZXQgcmVhZFN0cmVhbSA9IHRydWU7XG5hc3luYyBmdW5jdGlvbiBibG9iVG9CYXNlNjQoYmxvYikge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICBtcyA+IDAgPyBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSA6IHJlc29sdmUoMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gY2FsY3VsYXRlRGVsYXkoc3RhcnRUaW1lKSB7XG4gIGNvbnN0IGVuZFRpbWUgPSBEYXRlLm5vdygpO1xuICAvLyBkaWZmZXJlbmNlIGluIG1zXG4gIGNvbnN0IGR0ID0gZW5kVGltZSAtIHN0YXJ0VGltZTtcbiAgY29uc3QgZGVsYXkgPSAxMDAgLSBkdDtcbiAvLyBjb25zb2xlLmxvZygnW1dPUktFUiBUSU1FXScsIGR0LCAnW0RFTEFZIDEwMC14XScsIGRlbGF5KTtcbiAgcmV0dXJuIGRlbGF5ID4gNCA/IGRlbGF5IDogMDtcbn1cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlRnJhbWUoZnJhbWVTdHJlYW0sIHRyYWNrU2V0dGluZ3MpIHtcbiAgY29uc3QgcmVhZGVyID0gZnJhbWVTdHJlYW0uZ2V0UmVhZGVyKCk7XG5cbiAgd2hpbGUgKHJlYWRTdHJlYW0pIHtcbiAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgIGlmIChyZXN1bHQuZG9uZSkgYnJlYWs7XG5cbiAgICBjb25zdCBmcmFtZUZyb21DYW1lcmEgPSByZXN1bHQudmFsdWU7XG5cbiAgICBhd2FpdCBwYXJzZUZyYW1lRnJvbUNhbWVyYShmcmFtZUZyb21DYW1lcmEsIHRyYWNrU2V0dGluZ3MpO1xuICAgIC8vIHdhaXRcbiAgICBhd2FpdCBkZWxheShjYWxjdWxhdGVEZWxheSh0aW1lKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VGcmFtZUZhc3QoZnJhbWVTdHJlYW0sIHRyYWNrU2V0dGluZ3MpIHtcbiAgY29uc29sZS53YXJuKCdGQVNUJywgcGVyZm9ybWFuY2Uubm93KCkpO1xuICBjb25zdCByZWFkZXIgPSBmcmFtZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0cmFja1NldHRpbmdzO1xuICBjb25zdCBvZmZzY3JlZW5TbWFsbCA9IG5ldyBPZmZzY3JlZW5DYW52YXMoMzg0LCAzODQpO1xuICBjb25zdCBjb250ZXh0ID0gb2Zmc2NyZWVuU21hbGwuZ2V0Q29udGV4dCgnMmQnKTtcbiAgbGV0IHRpbWUgPSAwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gIGNvbnNvbGUudGltZSgncmVzdWx0Jyk7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWQoKTtcbiAgICAvLyAgY29uc29sZS50aW1lRW5kKCdyZXN1bHQnKTtcbiAgICBpZiAocmVzdWx0LmRvbmUpIGJyZWFrO1xuXG4gICAgY29uc3QgZnJhbWVGcm9tQ2FtZXJhID0gcmVzdWx0LnZhbHVlO1xuICAgIC8vIGNvbnNvbGUubG9nKGZyYW1lRnJvbUNhbWVyYS50aW1lc3RhbXApO1xuXG4gICAgLy8gY29uc3QgdHQgPSBmcmFtZUZyb21DYW1lcmEudGltZXN0YW1wIC0gdGltZTtcbiAgICAvLyBjb25zb2xlLmxvZyh0dCAvIDEwMDApO1xuICAgIC8vIHRpbWUgPSBmcmFtZUZyb21DYW1lcmEudGltZXN0YW1wO1xuXG4gICAgLy8gY29uc29sZS50aW1lKCdiaXRtYXAnKTtcbiAgICBjb25zdCBiaXRtYXAgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChmcmFtZUZyb21DYW1lcmEsIHtcbiAgICAgIHByZW11bHRpcGx5QWxwaGE6ICdkZWZhdWx0JyxcbiAgICB9KTtcbiAgICBjb25zb2xlLndhcm4obmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgIC8vIGNvbnNvbGUudGltZUVuZCgnYml0bWFwJyk7XG5cbiAgICAvLyBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCAzODQsIDM4NCk7XG4gICAgLy8gY29uc29sZS50aW1lKCdkcmF3Jyk7XG4gICAgLy8gY29udGV4dC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCAzODQsIDM4NCk7XG4gICAgLy8gY29uc29sZS50aW1lRW5kKCdkcmF3Jyk7XG4gICAgLy8gY29uc29sZS50aW1lKCd0cmFuc2ZlcicpO1xuICAgIC8vIGNvbnN0IGJpdG1hcFNtYWxsID0gb2Zmc2NyZWVuU21hbGwudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7XG4gICAgLy8gY29uc29sZS50aW1lRW5kKCd0cmFuc2ZlcicpO1xuXG4gICAgZnJhbWVGcm9tQ2FtZXJhLmNsb3NlKCk7XG4gICAgLy8gLy9cbiAgICAvLyBjb25zdCB0MSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG5cbiAgICAvLyBhd2FpdCBwYXJzZUZyYW1lRnJvbUNhbWVyYShmcmFtZUZyb21DYW1lcmEsIHRyYWNrU2V0dGluZ3MpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlRnJhbWVGcm9tQ2FtZXJhKGZyYW1lRnJvbUNhbWVyYSwgdHJhY2tTZXR0aW5ncykge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRyYWNrU2V0dGluZ3M7XG4gIGNvbnN0IG9mZnNjcmVlblNtYWxsID0gbmV3IE9mZnNjcmVlbkNhbnZhcygzODQsIDM4NCk7XG4gIC8vIGNvbnNvbGUudGltZSgnYml0MicpO1xuICBjb25zdCBiaXRtYXAgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChmcmFtZUZyb21DYW1lcmEsIHtcbiAgICBwcmVtdWx0aXBseUFscGhhOiAnZGVmYXVsdCcsXG4gIH0pO1xuICAvLyBjb25zb2xlLnRpbWVFbmQoJ2JpdDInKTtcbiAgY29uc3QgY29udGV4dCA9IG9mZnNjcmVlblNtYWxsLmdldENvbnRleHQoJzJkJyk7XG5cbiAgLy8gICAgICBjb25zb2xlLnRpbWUoJ2J1ZmZlcicpO1xuICAvLyAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGZyYW1lRnJvbUNhbWVyYS5hbGxvY2F0aW9uU2l6ZSgpKTtcbiAgLy8gICAgICBsZXQgbGF5b3V0ID0gYXdhaXQgZnJhbWVGcm9tQ2FtZXJhLmNvcHlUbyhidWZmZXIpO1xuXG4gIC8vICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IGJsb2JUb0Jhc2U2NChuZXcgQmxvYihbYnVmZmVyXSkpO1xuICAvLyBjb25zb2xlLmxvZyhiYXNlNjQpXG4gIC8vICAgICAgY29uc29sZS50aW1lRW5kKCdidWZmZXInKTtcblxuICBpZiAoY29udGV4dCkge1xuICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cbiAgICAvLyBsZXQgdmlkZW9GcmFtZTIgPSBmcmFtZUZyb21DYW1lcmEuY2xvbmUoKTtcblxuICAgIC8vICAgY3JlYXRlSW1hZ2VCaXRtYXAoKTtcblxuICAgIC8vIGNvbnNvbGUudGltZSgnY2xlYXInKTtcbiAgICAvLyBjb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAvLyAgY29uc29sZS50aW1lRW5kKCdjbGVhcicpO1xuICAgIC8vIGNvbnNvbGUudGltZSgnZHJhdycpO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKGJpdG1hcCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgMzg0LCAzODQpO1xuICAgIC8vIGNvbnNvbGUudGltZUVuZCgnZHJhdycpO1xuICAgIC8vIGNvbnRleHQuZHJhd0ltYWdlKGJpdCwgMCwgMCk7XG4gICAgLy8gIGJpdDIuY2xvc2UoKTtcbiAgICAvLyAgYml0LmNsb3NlKCk7XG4gICAgLy8gIGNvbnNvbGUudGltZUVuZCgnZHJhdycpO1xuICAgIC8vIGNvbnNvbGUudGltZSgnY2FwdHVyZScpO1xuXG4gICAgLy8gY29uc3QgYml0bWFwc21hbGwgPSBvZmZzY3JlZW5TbWFsbC50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtcblxuICAgIC8vIGNvbnN0IGltYWdlRGF0YSA9IGNvbnRleHQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDM4NCwgMzg0KTtcbiAgICAvLyAgY29uc29sZS50aW1lRW5kKCdjYXB0dXJlJyk7XG4gICAgLy8gY29uc29sZS50aW1lKCdibG9iJyk7XG4gICAgY29uc3QgcmVzaXplZCA9IGF3YWl0IG9mZnNjcmVlblNtYWxsLmNvbnZlcnRUb0Jsb2Ioe1xuICAgICAgdHlwZTogJ2ltYWdlL2pwZWcnLFxuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUudGltZUVuZCgnYmxvYicpO1xuICAgIC8vICBjb25zb2xlLmxvZyhyZXNpemVkKTtcbiAgICAvLyAgY29uc29sZS50aW1lKCdiYXNlNjQnKTtcbiAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCBibG9iVG9CYXNlNjQocmVzaXplZCk7XG4gICAgLy9jb25zb2xlLnRpbWVFbmQoJ2Jhc2U2NCcpO1xuICAgIC8vIGNvbnNvbGUubG9nKGJsb2IpO1xuXG4gICAgLy8gY29uc29sZS50aW1lKCdjb252ZXJ0JylcbiAgICAvLyBhd2FpdCBjb252ZXJ0KGJpdG1hcCwgdHJhY2tTZXR0aW5ncylcbiAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ2NvbnZlcnQnKTtcbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgICclYyAnLFxuICAgIC8vICAgJ2ZvbnQtc2l6ZTozODRweDsgYmFja2dyb3VuZDp1cmwoJytibG9iKycpIG5vLXJlcGVhdDsnXG4gICAgLy8gKTtcblxuICAgIC8vICAgY29uc29sZS50aW1lRW5kKCdibG9iJyk7XG4gICAgcG9zdE1lc3NhZ2UoeyBiYXNlNjQsIGJpdG1hcCB9LCBbYml0bWFwXSk7XG4gICAgLy8gdmlkZW9GcmFtZTIuY2xvc2UoKTtcbiAgfVxuICBmcmFtZUZyb21DYW1lcmEuY2xvc2UoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29udmVydChpbWFnZSwgdHJhY2tTZXR0aW5ncykge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRyYWNrU2V0dGluZ3M7XG5cbiAgY29uc3Qgb2Zmc2NyZWVuU21hbGwgPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSBvZmZzY3JlZW5TbWFsbC5nZXRDb250ZXh0KCcyZCcpO1xuXG4gIC8vIGNvbnNvbGUudGltZSgnYnVmZmVyJyk7XG4gIC8vIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGZyYW1lRnJvbUNhbWVyYS5hbGxvY2F0aW9uU2l6ZSgpKTtcbiAgLy8gbGV0IGxheW91dCA9IGF3YWl0IGZyYW1lRnJvbUNhbWVyYS5jb3B5VG8oYnVmZmVyKTtcbiAgLy8gY29uc29sZS50aW1lRW5kKCdidWZmZXInKTtcblxuICBpZiAoY29udGV4dCkge1xuICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgLy8gbGV0IHZpZGVvRnJhbWUyID0gZnJhbWVGcm9tQ2FtZXJhLmNsb25lKCk7XG4gICAgY29uc29sZS53YXJuKGltYWdlKTtcbiAgICAvLyAgIGNyZWF0ZUltYWdlQml0bWFwKCk7XG5cbiAgICAvLyBjb25zb2xlLnRpbWUoJ2NsZWFyJyk7XG4gICAgLy8gY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgLy8gY29uc29sZS50aW1lRW5kKCdjbGVhcicpO1xuXG4gICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgIC8vIGNvbnRleHQuZHJhd0ltYWdlKGJpdCwgMCwgMCk7XG4gICAgLy8gaW1hZ2UuY2xvc2UoKTtcbiAgICAvLyBjb25zb2xlLnRpbWVFbmQoJ2RyYXdCJyk7XG4gICAgY29uc29sZS50aW1lKCdibG9iMicpO1xuICAgIGNvbnN0IHJlc2l6ZWQgPSBhd2FpdCBvZmZzY3JlZW5TbWFsbC5jb252ZXJ0VG9CbG9iKHtcbiAgICAgIHR5cGU6ICdpbWFnZS9qcGVnJyxcbiAgICB9KTtcbiAgICBjb25zb2xlLnRpbWVFbmQoJ2Jsb2IyJyk7XG5cbiAgICAvLyBpbWFnZS5jbG9zZSgpO1xuICAgIC8vIGNvbnNvbGUudGltZSgnYmFzZTY0Jyk7XG4gICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgYmxvYlRvQmFzZTY0KHJlc2l6ZWQpO1xuXG4gICAgLy8gY29uc29sZS5sb2coYmxvYik7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgICclYyAnLFxuICAgIC8vICAgJ2ZvbnQtc2l6ZTozODRweDsgYmFja2dyb3VuZDp1cmwoJyArIGJhc2U2NCArICcpIG5vLXJlcGVhdDsnXG4gICAgLy8gKTtcblxuICAgIC8vICBjb25zb2xlLnRpbWVFbmQoJ2Jhc2U2NCcpO1xuICAgIC8vcG9zdE1lc3NhZ2UoeyB0eXBlOiAnY29udmVydCcsIGJhc2U2NCB9KTtcbiAgfVxufVxuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsICh7IGRhdGEgfSkgPT4ge1xuICBjb25zdCB7IHR5cGUsIGltYWdlLCBmcmFtZVN0cmVhbSwgdHJhY2tTZXR0aW5ncyB9ID0gZGF0YTtcbiAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHJlYWRTdHJlYW0gPSB0cnVlO1xuICAgICAgcGFyc2VGcmFtZShmcmFtZVN0cmVhbSwgdHJhY2tTZXR0aW5ncyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2Zhc3QnOlxuICAgICAgcmVhZFN0cmVhbSA9IHRydWU7XG4gICAgICBwYXJzZUZyYW1lRmFzdChmcmFtZVN0cmVhbSwgdHJhY2tTZXR0aW5ncyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgY29uc29sZS53YXJuKCdTVE9QIFdPUktFUicpO1xuICAgICAgcmVhZFN0cmVhbSA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb252ZXJ0JzpcbiAgICAgIGNvbnZlcnQoaW1hZ2UsIHRyYWNrU2V0dGluZ3MpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgLy8gY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgLy8gaWYgKGRhdGEuY2FudmFzKSB7XG4gIC8vICAgcG9zdE1lc3NhZ2UoJ29rJyk7XG4gIC8vIH0gZWxzZSB7XG5cbiAgLy8gICBwb3N0TWVzc2FnZShyZXNwb25zZSk7XG4gIC8vIH1cbn0pO1xuYDtcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { WebcamModule } from './webcam/webcam.module';
4
+ import * as i0 from "@angular/core";
5
+ export class CoreComponentsModule {
6
+ }
7
+ CoreComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ CoreComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, imports: [CommonModule, WebcamModule], exports: [WebcamModule] });
9
+ CoreComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, imports: [CommonModule, WebcamModule, WebcamModule] });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ imports: [CommonModule, WebcamModule],
14
+ declarations: [],
15
+ exports: [WebcamModule],
16
+ }]
17
+ }] });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL2NvbXBvbmVudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPdEQsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLFlBSnJCLFlBQVksRUFBRSxZQUFZLGFBRTFCLFlBQVk7a0hBRVgsb0JBQW9CLFlBSnJCLFlBQVksRUFBRSxZQUFZLEVBRTFCLFlBQVk7MkZBRVgsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQ3JDLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgV2ViY2FtTW9kdWxlIH0gZnJvbSAnLi93ZWJjYW0vd2ViY2FtLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFdlYmNhbU1vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGV4cG9ydHM6IFtXZWJjYW1Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50c01vZHVsZSB7fVxuIl19
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Container class for a captured webcam image
3
+ * @author basst314, davidshen84
4
+ */
5
+ export class WebcamImage {
6
+ constructor(imageAsDataUrl, mimeType, imageData, resized) {
7
+ this._mimeType = mimeType;
8
+ this._imageAsDataUrl = imageAsDataUrl;
9
+ this._imageData = imageData;
10
+ this._imageResized = resized;
11
+ }
12
+ /**
13
+ * Extracts the Base64 data out of the given dataUrl.
14
+ * @param dataUrl the given dataUrl
15
+ * @param mimeType the mimeType of the data
16
+ */
17
+ static getDataFromDataUrl(dataUrl, mimeType) {
18
+ return dataUrl.replace(`data:${mimeType};base64,`, '');
19
+ }
20
+ /**
21
+ * Get the base64 encoded image data
22
+ * @returns base64 data of the image
23
+ */
24
+ get imageAsBase64() {
25
+ return this._imageAsBase64
26
+ ? this._imageAsBase64
27
+ : (this._imageAsBase64 = WebcamImage.getDataFromDataUrl(this._imageAsDataUrl, this._mimeType));
28
+ }
29
+ /**
30
+ * Get the encoded image as dataUrl
31
+ * @returns the dataUrl of the image
32
+ */
33
+ get imageAsDataUrl() {
34
+ return this._imageAsDataUrl;
35
+ }
36
+ /**
37
+ * Get the ImageData object associated with the canvas' 2d context.
38
+ * @returns the ImageData of the canvas's 2d context.
39
+ */
40
+ get imageData() {
41
+ return this._imageData;
42
+ }
43
+ get imageResized() {
44
+ return this._imageResized;
45
+ }
46
+ get dataUrl() {
47
+ const canvas = document.createElement('canvas');
48
+ const { width, height } = this._imageData;
49
+ canvas.width = width;
50
+ canvas.height = height;
51
+ const ctx = canvas.getContext('2d');
52
+ if (ctx) {
53
+ ctx.putImageData(this._imageData, 0, 0);
54
+ }
55
+ return canvas.toDataURL(this._mimeType, 1);
56
+ }
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUNFLGNBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLFNBQW9CLEVBQ3BCLE9BQVk7UUFFWixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBU0Q7Ozs7T0FJRztJQUNLLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsUUFBZ0I7UUFDakUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsUUFBUSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjO1lBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYztZQUNyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FDbkQsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FDZixDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEQsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWluZXIgY2xhc3MgZm9yIGEgY2FwdHVyZWQgd2ViY2FtIGltYWdlXG4gKiBAYXV0aG9yIGJhc3N0MzE0LCBkYXZpZHNoZW44NFxuICovXG5leHBvcnQgY2xhc3MgV2ViY2FtSW1hZ2Uge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgaW1hZ2VBc0RhdGFVcmw6IHN0cmluZyxcbiAgICBtaW1lVHlwZTogc3RyaW5nLFxuICAgIGltYWdlRGF0YTogSW1hZ2VEYXRhLFxuICAgIHJlc2l6ZWQ6IGFueVxuICApIHtcbiAgICB0aGlzLl9taW1lVHlwZSA9IG1pbWVUeXBlO1xuICAgIHRoaXMuX2ltYWdlQXNEYXRhVXJsID0gaW1hZ2VBc0RhdGFVcmw7XG4gICAgdGhpcy5faW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgIHRoaXMuX2ltYWdlUmVzaXplZCA9IHJlc2l6ZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9taW1lVHlwZTogc3RyaW5nO1xuICBwcml2YXRlIF9pbWFnZUFzQmFzZTY0Pzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbWFnZUFzRGF0YVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbWFnZURhdGE6IEltYWdlRGF0YTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW1hZ2VSZXNpemVkOiBzdHJpbmc7XG5cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIEJhc2U2NCBkYXRhIG91dCBvZiB0aGUgZ2l2ZW4gZGF0YVVybC5cbiAgICogQHBhcmFtIGRhdGFVcmwgdGhlIGdpdmVuIGRhdGFVcmxcbiAgICogQHBhcmFtIG1pbWVUeXBlIHRoZSBtaW1lVHlwZSBvZiB0aGUgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RGF0YUZyb21EYXRhVXJsKGRhdGFVcmw6IHN0cmluZywgbWltZVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBkYXRhVXJsLnJlcGxhY2UoYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LGAsICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2U2NCBlbmNvZGVkIGltYWdlIGRhdGFcbiAgICogQHJldHVybnMgYmFzZTY0IGRhdGEgb2YgdGhlIGltYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlQXNCYXNlNjQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VBc0Jhc2U2NFxuICAgICAgPyB0aGlzLl9pbWFnZUFzQmFzZTY0XG4gICAgICA6ICh0aGlzLl9pbWFnZUFzQmFzZTY0ID0gV2ViY2FtSW1hZ2UuZ2V0RGF0YUZyb21EYXRhVXJsKFxuICAgICAgICAgIHRoaXMuX2ltYWdlQXNEYXRhVXJsLFxuICAgICAgICAgIHRoaXMuX21pbWVUeXBlXG4gICAgICAgICkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW5jb2RlZCBpbWFnZSBhcyBkYXRhVXJsXG4gICAqIEByZXR1cm5zIHRoZSBkYXRhVXJsIG9mIHRoZSBpbWFnZVxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUFzRGF0YVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZUFzRGF0YVVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEltYWdlRGF0YSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYW52YXMnIDJkIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHRoZSBJbWFnZURhdGEgb2YgdGhlIGNhbnZhcydzIDJkIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlRGF0YSgpOiBJbWFnZURhdGEge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZURhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGltYWdlUmVzaXplZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZVJlc2l6ZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGFVcmwoKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuX2ltYWdlRGF0YTtcbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKGN0eCkge1xuICAgICAgY3R4LnB1dEltYWdlRGF0YSh0aGlzLl9pbWFnZURhdGEsIDAsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKHRoaXMuX21pbWVUeXBlLCAxKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export class WebcamInitError {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLWluaXQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS9kb21haW4vd2ViY2FtLWluaXQtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGVBQWU7Q0FHM0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgV2ViY2FtSW5pdEVycm9yIHtcbiAgcHVibGljIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHB1YmxpYyBtZWRpYVN0cmVhbUVycm9yPzphbnk7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export class WebcamMirrorProperties {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLW1pcnJvci1wcm9wZXJ0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjYW5kb2Mvc3JjL2NvcmUvY29tcG9uZW50cy93ZWJjYW0vZG9tYWluL3dlYmNhbS1taXJyb3ItcHJvcGVydGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sc0JBQXNCO0NBRWxDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFdlYmNhbU1pcnJvclByb3BlcnRpZXMge1xuICBwdWJsaWMgeD86IHN0cmluZzsgIC8vIFtcImF1dG9cIiwgXCJhbHdheXNcIiwgXCJuZXZlclwiXVxufVxuIl19
@@ -0,0 +1,48 @@
1
+ import { from, Observable } from 'rxjs';
2
+ import { switchMap, tap } from 'rxjs/operators';
3
+ export class WebcamUtil {
4
+ /**
5
+ * Lists available videoInput devices
6
+ * @returns a list of media device info.
7
+ */
8
+ static getAvailableVideoInputs() {
9
+ return new Observable((observer) => {
10
+ if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
11
+ return observer.error(null);
12
+ }
13
+ const _window = window;
14
+ let streams;
15
+ from(navigator.mediaDevices.getUserMedia({
16
+ video: { deviceId: undefined },
17
+ }))
18
+ .pipe(tap((s) => { streams = s; }), switchMap((s) => from(navigator.mediaDevices.enumerateDevices())))
19
+ .subscribe((devices) => {
20
+ // console.log(streams);
21
+ if (streams) {
22
+ streams.getTracks().forEach((track) => {
23
+ track.stop();
24
+ });
25
+ }
26
+ observer.next(devices.filter((device) => device.kind === 'videoinput'));
27
+ });
28
+ });
29
+ // return new Promise((resolve, reject) => {
30
+ // navigator.mediaDevices.getUserMedia({
31
+ // video: undefined,
32
+ // });
33
+ // navigator.mediaDevices
34
+ // .enumerateDevices()
35
+ // .then((devices: MediaDeviceInfo[]) => {
36
+ // resolve(
37
+ // devices.filter(
38
+ // (device: MediaDeviceInfo) => device.kind === 'videoinput'
39
+ // )
40
+ // );
41
+ // })
42
+ // .catch((err) => {
43
+ // reject(err.message || err);
44
+ // });
45
+ // });
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViY2FtLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL3dlYmNhbS91dGlsL3dlYmNhbS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFVBQVU7SUFDckI7OztPQUdHO0lBRUksTUFBTSxDQUFDLHVCQUF1QjtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2RSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7WUFDRCxNQUFNLE9BQU8sR0FBUSxNQUFNLENBQUM7WUFDakMsSUFBSSxPQUFZLENBQUM7WUFDWixJQUFJLENBQ0YsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7YUFDL0IsQ0FBQyxDQUNIO2lCQUNFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFFLE9BQU8sR0FBRyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUMsRUFDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDZCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQ2hELENBQ0Y7aUJBQ0EsU0FBUyxDQUFDLENBQUMsT0FBMEIsRUFBRSxFQUFFO2dCQUMxQyx5QkFBeUI7Z0JBRXZCLElBQUksT0FBTyxFQUFFO29CQUNYLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTt3QkFDekMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNmLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1gsT0FBTyxDQUFDLE1BQU0sQ0FDWixDQUFDLE1BQXVCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUMxRCxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLDBDQUEwQztRQUMxQyx3QkFBd0I7UUFDeEIsUUFBUTtRQUNSLDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsOENBQThDO1FBQzlDLGlCQUFpQjtRQUNqQiwwQkFBMEI7UUFDMUIsc0VBQXNFO1FBQ3RFLFlBQVk7UUFDWixXQUFXO1FBQ1gsU0FBUztRQUNULHdCQUF3QjtRQUN4QixvQ0FBb0M7UUFDcEMsVUFBVTtRQUNWLE1BQU07SUFDUixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBXZWJjYW1VdGlsIHtcbiAgLyoqXG4gICAqIExpc3RzIGF2YWlsYWJsZSB2aWRlb0lucHV0IGRldmljZXNcbiAgICogQHJldHVybnMgYSBsaXN0IG9mIG1lZGlhIGRldmljZSBpbmZvLlxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGdldEF2YWlsYWJsZVZpZGVvSW5wdXRzKCk6IE9ic2VydmFibGU8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICBpZiAoIW5hdmlnYXRvci5tZWRpYURldmljZXMgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcykge1xuICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IobnVsbCk7XG4gICAgICB9XG4gICAgICBjb25zdCBfd2luZG93OiBhbnkgPSB3aW5kb3c7XG4gbGV0IHN0cmVhbXM6IGFueTtcbiAgICAgIGZyb20oXG4gICAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcbiAgICAgICAgICB2aWRlbzogeyBkZXZpY2VJZDogdW5kZWZpbmVkIH0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgocykgPT4ge3N0cmVhbXMgPSBzfSksXG4gICAgICAgICAgc3dpdGNoTWFwKChzKSA9PlxuICAgICAgICAgICAgZnJvbShuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKHN0cmVhbXMpO1xuXG4gICAgICAgICAgaWYgKHN0cmVhbXMpIHtcbiAgICAgICAgICAgIHN0cmVhbXMuZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2s6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChcbiAgICAgICAgICAgIGRldmljZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAoZGV2aWNlOiBNZWRpYURldmljZUluZm8pID0+IGRldmljZS5raW5kID09PSAndmlkZW9pbnB1dCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgLy8gICAgIHZpZGVvOiB1bmRlZmluZWQsXG4gICAgLy8gICB9KTtcbiAgICAvLyAgIG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAvLyAgICAgLmVudW1lcmF0ZURldmljZXMoKVxuICAgIC8vICAgICAudGhlbigoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHtcbiAgICAvLyAgICAgICByZXNvbHZlKFxuICAgIC8vICAgICAgICAgZGV2aWNlcy5maWx0ZXIoXG4gICAgLy8gICAgICAgICAgIChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0J1xuICAgIC8vICAgICAgICAgKVxuICAgIC8vICAgICAgICk7XG4gICAgLy8gICAgIH0pXG4gICAgLy8gICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgLy8gICAgICAgcmVqZWN0KGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vIH0pO1xuICB9XG59XG4iXX0=