ngx-scandoc 0.0.1 → 1.0.2
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/core/app.worker.d.ts +1 -0
- package/core/components/base.component.d.ts +6 -0
- package/core/components/camera-switch/camera-switch.component.d.ts +11 -0
- package/core/components/components.module.d.ts +15 -0
- package/core/components/scan/scan.component.d.ts +120 -0
- package/core/components/scan-results/scan-results.component.d.ts +20 -0
- package/core/components/webcam/domain/webcam-image.d.ts +35 -0
- package/core/components/webcam/domain/webcam-init-error.d.ts +4 -0
- package/core/components/webcam/domain/webcam-mirror-properties.d.ts +3 -0
- package/core/components/webcam/util/webcam.util.d.ts +8 -0
- package/core/components/webcam/webcam/webcam.component.d.ts +205 -0
- package/core/components/webcam/webcam.module.d.ts +9 -0
- package/core/interfaces/config.d.ts +16 -0
- package/core/pipes/pipes.module.d.ts +7 -0
- package/core/pipes/safeResourceUrl.pipe.d.ts +10 -0
- package/core/shared/material.module.d.ts +28 -0
- package/dialogs/components/blank/blank.component.d.ts +16 -0
- package/dialogs/components/confirm/confirm.component.d.ts +30 -0
- package/dialogs/components/loading/loading.component.d.ts +5 -0
- package/dialogs/components/scan-profile/scan-profile.component.d.ts +18 -0
- package/dialogs/components/scan-selfie/scan-selfie.component.d.ts +83 -0
- package/dialogs/components/turn-document/turn-document.component.d.ts +12 -0
- package/dialogs/dialogs.core.provider.d.ts +18 -0
- package/dialogs/dialogs.module.d.ts +21 -0
- package/esm2020/core/app.worker.mjs +236 -0
- package/esm2020/core/components/base.component.mjs +15 -0
- package/esm2020/core/components/camera-switch/camera-switch.component.mjs +22 -0
- package/esm2020/core/components/components.module.mjs +46 -0
- package/esm2020/core/components/scan/scan.component.mjs +587 -0
- package/esm2020/core/components/scan-results/scan-results.component.mjs +38 -0
- package/esm2020/core/components/webcam/domain/webcam-image.mjs +58 -0
- package/esm2020/core/components/webcam/domain/webcam-init-error.mjs +3 -0
- package/esm2020/core/components/webcam/domain/webcam-mirror-properties.mjs +3 -0
- package/esm2020/core/components/webcam/util/webcam.util.mjs +48 -0
- package/esm2020/core/components/webcam/webcam/webcam.component.mjs +867 -0
- package/esm2020/core/components/webcam/webcam.module.mjs +22 -0
- package/esm2020/core/interfaces/config.mjs +2 -0
- package/esm2020/core/pipes/pipes.module.mjs +19 -0
- package/esm2020/core/pipes/safeResourceUrl.pipe.mjs +20 -0
- package/esm2020/core/shared/material.module.mjs +162 -0
- package/esm2020/dialogs/components/blank/blank.component.mjs +46 -0
- package/esm2020/dialogs/components/confirm/confirm.component.mjs +53 -0
- package/esm2020/dialogs/components/loading/loading.component.mjs +12 -0
- package/esm2020/dialogs/components/scan-profile/scan-profile.component.mjs +48 -0
- package/esm2020/dialogs/components/scan-selfie/scan-selfie.component.mjs +392 -0
- package/esm2020/dialogs/components/turn-document/turn-document.component.mjs +32 -0
- package/esm2020/dialogs/dialogs.core.provider.mjs +109 -0
- package/esm2020/dialogs/dialogs.module.mjs +89 -0
- package/esm2020/forms/form.module.mjs +87 -0
- package/esm2020/forms/types/avatar.type.mjs +53 -0
- package/esm2020/forms/types/profile.image.type.mjs +54 -0
- package/esm2020/forms/types/title.type.mjs +60 -0
- package/esm2020/lib/ngx-scandoc.module.mjs +28 -11
- package/esm2020/providers/auth.provider.mjs +58 -0
- package/esm2020/providers/camera.provider.mjs +40 -0
- package/esm2020/providers/interceptor.provider.mjs +61 -0
- package/esm2020/providers/layout.provider.mjs +28 -0
- package/esm2020/providers/scan.form.mjs +386 -0
- package/esm2020/providers/scan.provider.mjs +488 -0
- package/esm2020/providers/translation.provider.mjs +50 -0
- package/esm2020/providers/webrtc.provider.mjs +58 -0
- package/esm2020/public-api.mjs +24 -4
- package/fesm2015/ngx-scandoc.mjs +4190 -31
- package/fesm2015/ngx-scandoc.mjs.map +1 -1
- package/fesm2020/ngx-scandoc.mjs +4166 -31
- package/fesm2020/ngx-scandoc.mjs.map +1 -1
- package/forms/form.module.d.ts +18 -0
- package/forms/types/avatar.type.d.ts +14 -0
- package/forms/types/profile.image.type.d.ts +14 -0
- package/forms/types/title.type.d.ts +12 -0
- package/lib/ngx-scandoc.module.d.ts +6 -2
- package/package.json +6 -2
- package/providers/auth.provider.d.ts +21 -0
- package/providers/camera.provider.d.ts +17 -0
- package/providers/interceptor.provider.d.ts +13 -0
- package/providers/layout.provider.d.ts +11 -0
- package/providers/scan.form.d.ts +13 -0
- package/providers/scan.provider.d.ts +237 -0
- package/providers/translation.provider.d.ts +9 -0
- package/providers/webrtc.provider.d.ts +11 -0
- package/public-api.d.ts +23 -3
- package/esm2020/lib/ngx-scandoc.component.mjs +0 -22
- package/esm2020/lib/ngx-scandoc.service.mjs +0 -14
- package/lib/ngx-scandoc.component.d.ts +0 -8
- package/lib/ngx-scandoc.service.d.ts +0 -6
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EventEmitter, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';
|
|
2
|
+
import { MatDialogRef } from '@angular/material/dialog';
|
|
3
|
+
import { Subject, Observable } from 'rxjs';
|
|
4
|
+
import { FormGroup } from '@angular/forms';
|
|
5
|
+
import { WebcamImage } from '../../../core/components/webcam/domain/webcam-image';
|
|
6
|
+
import { WebcamInitError } from '../../../core/components/webcam/domain/webcam-init-error';
|
|
7
|
+
import { DialogsCoreProvider } from '../../../dialogs/dialogs.core.provider';
|
|
8
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
9
|
+
import { ScanProvider } from '../../../providers/scan.provider';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
export interface IWindow extends Window {
|
|
12
|
+
TextDetector: any;
|
|
13
|
+
}
|
|
14
|
+
export declare class ScanSelfieComponent implements AfterViewInit {
|
|
15
|
+
cd: ChangeDetectorRef;
|
|
16
|
+
scanProvider: ScanProvider;
|
|
17
|
+
private dialogs;
|
|
18
|
+
private translate;
|
|
19
|
+
scanBlastData: any;
|
|
20
|
+
type: string;
|
|
21
|
+
actions: EventEmitter<any>;
|
|
22
|
+
mediaDevices: any;
|
|
23
|
+
deviceId?: string;
|
|
24
|
+
videoOptions: MediaTrackConstraints;
|
|
25
|
+
dialogRef?: MatDialogRef<any>;
|
|
26
|
+
data: any;
|
|
27
|
+
multipleWebcamsAvailable: boolean;
|
|
28
|
+
fields: any;
|
|
29
|
+
documentTypeSelected: boolean;
|
|
30
|
+
selectedSide: any;
|
|
31
|
+
images: any;
|
|
32
|
+
preview: any;
|
|
33
|
+
scanType: any;
|
|
34
|
+
width: any;
|
|
35
|
+
height: any;
|
|
36
|
+
videoWidth: any;
|
|
37
|
+
videoHeight: any;
|
|
38
|
+
allowCameraSwitch: boolean;
|
|
39
|
+
error: boolean;
|
|
40
|
+
cameraReady: boolean;
|
|
41
|
+
result: any;
|
|
42
|
+
scaning: boolean;
|
|
43
|
+
defaultDevice: any;
|
|
44
|
+
scanDatas: any;
|
|
45
|
+
scanSide: any;
|
|
46
|
+
webcamImage?: WebcamImage;
|
|
47
|
+
model: any;
|
|
48
|
+
trigger: Subject<number>;
|
|
49
|
+
nextWebcam: Subject<boolean | string>;
|
|
50
|
+
form: FormGroup<{}>;
|
|
51
|
+
wraper?: ElementRef;
|
|
52
|
+
onResize(): void;
|
|
53
|
+
constructor(cd: ChangeDetectorRef, scanProvider: ScanProvider, dialogs: DialogsCoreProvider, translate: TranslateService);
|
|
54
|
+
init(): void;
|
|
55
|
+
handleImage(webcamImage: WebcamImage): void;
|
|
56
|
+
handleInitError(error: WebcamInitError): void;
|
|
57
|
+
get scanBlastCanUpload(): boolean;
|
|
58
|
+
cameraWasSwitched(deviceId: string): void;
|
|
59
|
+
get nextWebcamObservable(): Observable<boolean | string>;
|
|
60
|
+
ngAfterViewInit(): void;
|
|
61
|
+
selectCamera(event: any): void;
|
|
62
|
+
close(): void;
|
|
63
|
+
singleScan(side: any): void;
|
|
64
|
+
getBase64(file: any): Observable<unknown>;
|
|
65
|
+
handleFileInput(target: any, event: any, side: any): void;
|
|
66
|
+
rotateBase64Image(base64data: any): Observable<unknown>;
|
|
67
|
+
sendMobile(): void;
|
|
68
|
+
singleScanRotate(side: any): void;
|
|
69
|
+
singleScanRemove(side: any): void;
|
|
70
|
+
resolutionLimit(file: any): Observable<unknown>;
|
|
71
|
+
private getImgBase64;
|
|
72
|
+
scanBlastFinish(): void;
|
|
73
|
+
cameraOff(ev: any): void;
|
|
74
|
+
continue(): void;
|
|
75
|
+
retry(): void;
|
|
76
|
+
triggerSnapshot(): void;
|
|
77
|
+
scan(): void;
|
|
78
|
+
retake(): void;
|
|
79
|
+
use(): void;
|
|
80
|
+
selfie(): void;
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScanSelfieComponent, never>;
|
|
82
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScanSelfieComponent, "app-scan-selfie", never, { "type": "type"; }, { "actions": "actions"; }, never, never, false>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { MatDialogRef } from '@angular/material/dialog';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class TurnDocumentComponent implements OnInit {
|
|
5
|
+
dialogRef: MatDialogRef<TurnDocumentComponent>;
|
|
6
|
+
data: any;
|
|
7
|
+
constructor(dialogRef: MatDialogRef<TurnDocumentComponent>, data: any);
|
|
8
|
+
ngOnInit(): void;
|
|
9
|
+
close(): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TurnDocumentComponent, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TurnDocumentComponent, "app-turndocuments", never, {}, {}, never, never, false>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MatDialog, MatDialogRef } from '@angular/material/dialog';
|
|
2
|
+
import { BlankComponent } from './components/blank/blank.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class DialogsCoreProvider {
|
|
5
|
+
private matDialog;
|
|
6
|
+
components: any;
|
|
7
|
+
private blank;
|
|
8
|
+
constructor(matDialog: MatDialog);
|
|
9
|
+
private getComponent;
|
|
10
|
+
open(config: any, withComponent?: boolean): MatDialogRef<BlankComponent, any>;
|
|
11
|
+
scanProfile(data: any): MatDialogRef<BlankComponent, any>;
|
|
12
|
+
loading(title?: string): MatDialogRef<BlankComponent, any>;
|
|
13
|
+
alert(title: string, text: string): MatDialogRef<BlankComponent, any>;
|
|
14
|
+
turnDocument(idScan: any): import("rxjs").Observable<any>;
|
|
15
|
+
scanSelfie(data: any): MatDialogRef<BlankComponent, any>;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DialogsCoreProvider, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DialogsCoreProvider>;
|
|
18
|
+
}
|
|
@@ -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/turn-document/turn-document.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.TurnDocumentComponent, 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.TurnDocumentComponent, 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,15 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { takeUntil } from 'rxjs/operators';
|
|
3
|
+
export class BaseComponent {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.$destroy = new Subject();
|
|
6
|
+
}
|
|
7
|
+
__subs(observable) {
|
|
8
|
+
return observable.pipe(takeUntil(this.$destroy));
|
|
9
|
+
}
|
|
10
|
+
__destroy() {
|
|
11
|
+
this.$destroy.next(true);
|
|
12
|
+
this.$destroy.complete();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL2Jhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0UsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFVM0IsQ0FBQztJQVJDLE1BQU0sQ0FBQyxVQUEyQjtRQUNoQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBCYXNlQ29tcG9uZW50IHtcbiAgJGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gIF9fc3VicyhvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4pIHtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZS5waXBlKHRha2VVbnRpbCh0aGlzLiRkZXN0cm95KSk7XG4gIH1cblxuICBfX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy4kZGVzdHJveS5uZXh0KHRydWUpO1xuICAgIHRoaXMuJGRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../../providers/camera.provider";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/forms";
|
|
6
|
+
import * as i4 from "@angular/material/form-field";
|
|
7
|
+
import * as i5 from "@angular/material/select";
|
|
8
|
+
import * as i6 from "@angular/material/core";
|
|
9
|
+
export class CameraSwitchComponent {
|
|
10
|
+
constructor(cameraProvider) {
|
|
11
|
+
this.cameraProvider = cameraProvider;
|
|
12
|
+
}
|
|
13
|
+
ngAfterViewInit() { }
|
|
14
|
+
ngOnDestroy() { }
|
|
15
|
+
}
|
|
16
|
+
CameraSwitchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CameraSwitchComponent, deps: [{ token: i1.NgxScandocCameraProvider }], target: i0.ɵɵFactoryTarget.Component });
|
|
17
|
+
CameraSwitchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CameraSwitchComponent, selector: "ngx-scan-camera-switch", ngImport: i0, template: "<mat-form-field\n style=\"font-size: 14px; width: 200px; margin-top: 8px\"\n class=\"w-100 mr-16 mt-8\"\n>\n <mat-label> Camera </mat-label>\n <mat-select (selectionChange)=\"cameraProvider.selectCamera($event)\" [(ngModel)]=\"cameraProvider.deviceId\">\n <mat-option *ngFor=\"let device of cameraProvider.mediaDevices\" [value]=\"device.deviceId\">\n {{ device.label }}\n </mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }] });
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CameraSwitchComponent, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
args: [{ selector: 'ngx-scan-camera-switch', template: "<mat-form-field\n style=\"font-size: 14px; width: 200px; margin-top: 8px\"\n class=\"w-100 mr-16 mt-8\"\n>\n <mat-label> Camera </mat-label>\n <mat-select (selectionChange)=\"cameraProvider.selectCamera($event)\" [(ngModel)]=\"cameraProvider.deviceId\">\n <mat-option *ngFor=\"let device of cameraProvider.mediaDevices\" [value]=\"device.deviceId\">\n {{ device.label }}\n </mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [":host{display:flex;flex-direction:column!important;flex:1}\n"] }]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.NgxScandocCameraProvider }]; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLXN3aXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL2NhbWVyYS1zd2l0Y2gvY2FtZXJhLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL2NhbWVyYS1zd2l0Y2gvY2FtZXJhLXN3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxHQU1WLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVN2QixNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW1CLGNBQXdDO1FBQXhDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtJQUFHLENBQUM7SUFJL0QsZUFBZSxLQUFVLENBQUM7SUFFMUIsV0FBVyxLQUFVLENBQUM7O2tIQVBYLHFCQUFxQjtzR0FBckIscUJBQXFCLDhEQ2hCbEMseWJBV0E7MkZES2EscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hTY2FuZG9jQ2FtZXJhUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvY2FtZXJhLnByb3ZpZGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXNjYW4tY2FtZXJhLXN3aXRjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYW1lcmEtc3dpdGNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FtZXJhLXN3aXRjaC5jb21wb25lbnQuc2NzcyddLFxuLy8gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDYW1lcmFTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2FtZXJhUHJvdmlkZXI6IE5neFNjYW5kb2NDYW1lcmFQcm92aWRlcikge31cblxuXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHt9XG59XG4iLCI8bWF0LWZvcm0tZmllbGRcbiAgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IHdpZHRoOiAyMDBweDsgbWFyZ2luLXRvcDogOHB4XCJcbiAgY2xhc3M9XCJ3LTEwMCBtci0xNiBtdC04XCJcbj5cbiAgPG1hdC1sYWJlbD4gQ2FtZXJhIDwvbWF0LWxhYmVsPlxuICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cImNhbWVyYVByb3ZpZGVyLnNlbGVjdENhbWVyYSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJjYW1lcmFQcm92aWRlci5kZXZpY2VJZFwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkZXZpY2Ugb2YgY2FtZXJhUHJvdmlkZXIubWVkaWFEZXZpY2VzXCIgW3ZhbHVlXT1cImRldmljZS5kZXZpY2VJZFwiPlxuICAgICAge3sgZGV2aWNlLmxhYmVsIH19XG4gICAgPC9tYXQtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Q+XG48L21hdC1mb3JtLWZpZWxkPlxuIl19
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { WebcamModule } from './webcam/webcam.module';
|
|
4
|
+
import { ScanComponent } from './scan/scan.component';
|
|
5
|
+
import { MaterialModule } from '../shared/material.module';
|
|
6
|
+
import { AppFormModule } from '../../forms/form.module';
|
|
7
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
8
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
9
|
+
import { CameraSwitchComponent } from './camera-switch/camera-switch.component';
|
|
10
|
+
import { ScanResultsComponent } from './scan-results/scan-results.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class CoreComponentsModule {
|
|
13
|
+
}
|
|
14
|
+
CoreComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
15
|
+
CoreComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, declarations: [ScanComponent, ScanResultsComponent, CameraSwitchComponent], imports: [CommonModule,
|
|
16
|
+
FormsModule,
|
|
17
|
+
TranslateModule,
|
|
18
|
+
WebcamModule,
|
|
19
|
+
MaterialModule,
|
|
20
|
+
AppFormModule,
|
|
21
|
+
ReactiveFormsModule], exports: [WebcamModule, ScanComponent, CameraSwitchComponent] });
|
|
22
|
+
CoreComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, imports: [CommonModule,
|
|
23
|
+
FormsModule,
|
|
24
|
+
TranslateModule,
|
|
25
|
+
WebcamModule,
|
|
26
|
+
MaterialModule,
|
|
27
|
+
AppFormModule,
|
|
28
|
+
ReactiveFormsModule, WebcamModule] });
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CoreComponentsModule, decorators: [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
imports: [
|
|
33
|
+
CommonModule,
|
|
34
|
+
FormsModule,
|
|
35
|
+
TranslateModule,
|
|
36
|
+
WebcamModule,
|
|
37
|
+
MaterialModule,
|
|
38
|
+
AppFormModule,
|
|
39
|
+
ReactiveFormsModule,
|
|
40
|
+
],
|
|
41
|
+
declarations: [ScanComponent, ScanResultsComponent, CameraSwitchComponent],
|
|
42
|
+
exports: [WebcamModule, ScanComponent, CameraSwitchComponent],
|
|
43
|
+
providers: [],
|
|
44
|
+
}]
|
|
45
|
+
}] });
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NhbmRvYy9zcmMvY29yZS9jb21wb25lbnRzL2NvbXBvbmVudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQWtCN0UsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQUpoQixhQUFhLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLGFBVnZFLFlBQVk7UUFDWixXQUFXO1FBQ1gsZUFBZTtRQUVmLFlBQVk7UUFDWixjQUFjO1FBRWQsYUFBYTtRQUNiLG1CQUFtQixhQUdYLFlBQVksRUFBRSxhQUFhLEVBQUUscUJBQXFCO2tIQUdqRCxvQkFBb0IsWUFkN0IsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBRWYsWUFBWTtRQUNaLGNBQWM7UUFFZCxhQUFhO1FBQ2IsbUJBQW1CLEVBR1gsWUFBWTsyRkFHWCxvQkFBb0I7a0JBaEJoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFFZixZQUFZO3dCQUNaLGNBQWM7d0JBRWQsYUFBYTt3QkFDYixtQkFBbUI7cUJBQ3BCO29CQUNELFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQztvQkFDMUUsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQztvQkFDN0QsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBXZWJjYW1Nb2R1bGUgfSBmcm9tICcuL3dlYmNhbS93ZWJjYW0ubW9kdWxlJztcbmltcG9ydCB7IFNjYW5Db21wb25lbnQgfSBmcm9tICcuL3NjYW4vc2Nhbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0ZXJpYWxNb2R1bGUgfSBmcm9tICcuLi9zaGFyZWQvbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7IEFwcEZvcm1Nb2R1bGUgfSBmcm9tICcuLi8uLi9mb3Jtcy9mb3JtLm1vZHVsZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ2FtZXJhU3dpdGNoQ29tcG9uZW50IH0gZnJvbSAnLi9jYW1lcmEtc3dpdGNoL2NhbWVyYS1zd2l0Y2guY29tcG9uZW50JztcbmltcG9ydCB7IFNjYW5SZXN1bHRzQ29tcG9uZW50IH0gZnJvbSAnLi9zY2FuLXJlc3VsdHMvc2Nhbi1yZXN1bHRzLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuXG4gICAgV2ViY2FtTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlLFxuXG4gICAgQXBwRm9ybU1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtTY2FuQ29tcG9uZW50LCBTY2FuUmVzdWx0c0NvbXBvbmVudCwgQ2FtZXJhU3dpdGNoQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW1dlYmNhbU1vZHVsZSwgU2NhbkNvbXBvbmVudCwgQ2FtZXJhU3dpdGNoQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbXBvbmVudHNNb2R1bGUge31cbiJdfQ==
|