metag-sdk-ionic 1.2.11 → 1.3.0-gforms
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/dist/assets/backup/Dpi-Front.webm +0 -0
- package/dist/assets/backup/Dpi-back.webm +0 -0
- package/dist/assets/icon/favicon.png +0 -0
- package/dist/assets/icons/dpi-error.svg +9 -9
- package/dist/assets/icons/video-error.svg +9 -9
- package/dist/assets/imagesIdVision/56.png +0 -0
- package/dist/assets/imagesIdVision/57.png +0 -0
- package/dist/assets/imagesIdVision/Animacion-de-colocacion-de-DPI.webm +0 -0
- package/dist/assets/imagesIdVision/Animacion-de-como-tomar-foto-DPI.webm +0 -0
- package/dist/assets/imagesIdVision/Dpi-back.mp4 +0 -0
- package/dist/assets/imagesIdVision/Dpi-front-video.mp4 +0 -0
- package/dist/assets/imagesIdVision/Foco.png +0 -0
- package/dist/assets/imagesIdVision/Selfie-rostro.png +0 -0
- package/dist/assets/imagesIdVision/acuerdo-video-selfie.png +0 -0
- package/dist/assets/imagesIdVision/backDpiRegister.png +0 -0
- package/dist/assets/imagesIdVision/background.png +0 -0
- package/dist/assets/imagesIdVision/blue-check.png +0 -0
- package/dist/assets/imagesIdVision/documentsImage.png +0 -0
- package/dist/assets/imagesIdVision/frontDpiRegister.png +0 -0
- package/dist/assets/imagesIdVision/icon/favicon.png +0 -0
- package/dist/assets/imagesIdVision/icons/dpi-error.svg +9 -9
- package/dist/assets/imagesIdVision/icons/video-error.svg +9 -9
- package/dist/assets/imagesIdVision/no-internet.svg +3 -3
- package/dist/assets/imagesIdVision/overlay_container.png +0 -0
- package/dist/assets/imagesIdVision/rostroImage.png +0 -0
- package/dist/assets/imagesIdVision/shapes.svg +1 -1
- package/dist/assets/imagesIdVision/voiceImage.png +0 -0
- package/dist/assets/shapes.svg +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/src/app/app-routing.module.js +5 -5
- package/dist/src/app/app-routing.module.js.map +1 -1
- package/dist/src/app/app.component.js +2 -2
- package/dist/src/app/app.module.d.ts +2 -3
- package/dist/src/app/app.module.js +3 -5
- package/dist/src/app/app.module.js.map +1 -1
- package/dist/src/app/components/custom-button/custom-button.component.js +3 -3
- package/dist/src/app/home/home.page.js +3 -3
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.d.ts +7 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js +25 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js.map +1 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.d.ts +5 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js +58 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js.map +1 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.d.ts +11 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js +35 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js.map +1 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.d.ts +80 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js +640 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js.map +1 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.d.ts +9 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js +20 -0
- package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js.map +1 -0
- package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.d.ts +32 -17
- package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js +246 -122
- package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js +34 -33
- package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.d.ts +12 -0
- package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js +66 -0
- package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js.map +1 -0
- package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js +23 -32
- package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/components/custom-slide/custom-slide.component.js +3 -3
- package/dist/src/app/pages/id-vision/components/direct-photo-selfie/direct-photo-selfie.component.js +3 -3
- package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js +5 -5
- package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.d.ts +3 -0
- package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js +64 -21
- package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/components/simple-acuerdo-video/simple-acuerdo-video.component.js +3 -3
- package/dist/src/app/pages/id-vision/dpi/front-dpi/front-dpi.component.js +2 -2
- package/dist/src/app/pages/id-vision/id-vision.component.d.ts +36 -14
- package/dist/src/app/pages/id-vision/id-vision.component.js +556 -417
- package/dist/src/app/pages/id-vision/id-vision.component.js.map +1 -1
- package/dist/src/app/pages/id-vision/id-vision.module.js +2 -9
- package/dist/src/app/pages/id-vision/id-vision.module.js.map +1 -1
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.d.ts +18 -0
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js +43 -0
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.d.ts +10 -0
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js +29 -0
- package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/configuration/configuration.service.d.ts +1 -1
- package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js +2 -2
- package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js.map +1 -1
- package/dist/src/app/pages/id-vision/services/decrypt-text.service.d.ts +10 -0
- package/dist/src/app/pages/id-vision/services/decrypt-text.service.js +23 -0
- package/dist/src/app/pages/id-vision/services/decrypt-text.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.d.ts +16 -5
- package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js +167 -60
- package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js.map +1 -1
- package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.d.ts +23 -0
- package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js +44 -0
- package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.d.ts +22 -0
- package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js +45 -0
- package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/processing/processing.service.d.ts +7 -4
- package/dist/src/app/pages/id-vision/services/processing/processing.service.js +79 -50
- package/dist/src/app/pages/id-vision/services/processing/processing.service.js.map +1 -1
- package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.d.ts +14 -0
- package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js +72 -0
- package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js.map +1 -0
- package/dist/src/app/pages/id-vision/services/validation/validation.service.d.ts +2 -0
- package/dist/src/app/pages/id-vision/services/validation/validation.service.js +21 -5
- package/dist/src/app/pages/id-vision/services/validation/validation.service.js.map +1 -1
- package/dist/src/app/pages/slides/acuerdo-video/acuerdo-video.component.js +1 -1
- package/dist/src/app/pages/slides/dpi-back/slide2.component.js +3 -3
- package/dist/src/app/pages/slides/dpi-front/slide1.component.js +3 -3
- package/dist/src/app/pages/slides/photo-selfie/photo-selfie.component.js +1 -1
- package/dist/src/app/pages/slides/slide1/slide1.component.d.ts +10 -10
- package/dist/src/app/pages/slides/slide1/slide1.component.js +39 -39
- package/dist/src/app/pages/slides/slide2/slide2.component.d.ts +8 -8
- package/dist/src/app/pages/slides/slide2/slide2.component.js +17 -17
- package/dist/src/app/pages/slides/slide3/slide3.component.d.ts +8 -8
- package/dist/src/app/pages/slides/slide3/slide3.component.js +17 -17
- package/dist/src/app/pages/slides/slide4/slide4.component.js +2 -2
- package/dist/src/app/pages/slides/video-selfie/slide3.component.js +35 -35
- package/dist/src/environments/environment.d.ts +2 -0
- package/dist/src/environments/environment.js +3 -1
- package/dist/src/environments/environment.js.map +1 -1
- package/package.json +72 -62
- package/src/app/app.component.scss +0 -0
- package/src/theme/variables.scss +24 -24
|
@@ -15,7 +15,9 @@ import { NavigationService } from './services/navigation/navigation.service';
|
|
|
15
15
|
import { ProcessingService } from './services/processing/processing.service';
|
|
16
16
|
import { DpiService } from './services/dpi/dpi-service.service';
|
|
17
17
|
import { register } from './../../../swiper-wrapper';
|
|
18
|
-
import
|
|
18
|
+
import lottie from 'lottie-web';
|
|
19
|
+
import { AcuerdoVideoPage } from "./acuerdo-video/acuerdo-video.page";
|
|
20
|
+
import { CameraSecurityBlockComponent } from './components/camera-security-block/camera-security-block.component';
|
|
19
21
|
import * as i0 from "@angular/core";
|
|
20
22
|
import * as i1 from "@ionic/angular";
|
|
21
23
|
import * as i2 from "./services/modal-services/modal-dpi-services";
|
|
@@ -25,163 +27,223 @@ import * as i5 from "./services/validation/validation.service";
|
|
|
25
27
|
import * as i6 from "./services/navigation/navigation.service";
|
|
26
28
|
import * as i7 from "./services/processing/processing.service";
|
|
27
29
|
import * as i8 from "./services/dpi/dpi-service.service";
|
|
28
|
-
import * as i9 from "
|
|
30
|
+
import * as i9 from "./services/security/virtual-camera-detection.service";
|
|
31
|
+
import * as i10 from "@angular/common";
|
|
29
32
|
const _c0 = ["dpi"];
|
|
30
33
|
const _c1 = ["swiperContainer"];
|
|
31
|
-
const _c2 = a0 => ({ "
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
i0.ɵɵ
|
|
34
|
+
const _c2 = a0 => ({ "sdk-metag-blur-effect": a0 });
|
|
35
|
+
function IdVisionComponent_ion_content_0_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
37
|
+
i0.ɵɵelementStart(0, "ion-content", 3)(1, "app-camera-security-block", 12);
|
|
38
|
+
i0.ɵɵlistener("exitPressed", function IdVisionComponent_ion_content_0_Template_app_camera_security_block_exitPressed_1_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleInitSecurityExit()); });
|
|
39
|
+
i0.ɵɵelementEnd()();
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
42
|
+
i0.ɵɵadvance();
|
|
43
|
+
i0.ɵɵproperty("title", "Bloqueo por seguridad")("description", "Detectamos una c\u00E1mara virtual o no permitida durante la inicializaci\u00F3n del SDK.")("reason", ctx_r1.initCameraBlockReason)("exitLabel", "Entiendo");
|
|
44
|
+
} }
|
|
45
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_2_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
47
|
+
i0.ɵɵelementStart(0, "swiper-slide")(1, "div", 21)(2, "div", 22)(3, "div", 23);
|
|
36
48
|
i0.ɵɵtext(4, "Verifiquemos tu identidad");
|
|
37
49
|
i0.ɵɵelementEnd();
|
|
38
|
-
i0.ɵɵelementStart(5, "
|
|
39
|
-
i0.ɵɵtext(6, "
|
|
50
|
+
i0.ɵɵelementStart(5, "div", 24);
|
|
51
|
+
i0.ɵɵtext(6, " Por favor confirma tu n\u00FAmero de identificaci\u00F3n (DPI) y sigue las instrucciones. ");
|
|
40
52
|
i0.ɵɵelementEnd();
|
|
41
|
-
i0.ɵɵelementStart(7, "ion-item",
|
|
42
|
-
i0.ɵɵelement(8, "ion-input",
|
|
53
|
+
i0.ɵɵelementStart(7, "ion-item", 25);
|
|
54
|
+
i0.ɵɵelement(8, "ion-input", 26, 1);
|
|
43
55
|
i0.ɵɵelementEnd()();
|
|
44
|
-
i0.ɵɵelementStart(10, "ion-grid",
|
|
45
|
-
i0.ɵɵelement(13, "img",
|
|
56
|
+
i0.ɵɵelementStart(10, "ion-grid", 27)(11, "ion-row", 28)(12, "ion-col", 29);
|
|
57
|
+
i0.ɵɵelement(13, "img", 30);
|
|
46
58
|
i0.ɵɵelementEnd();
|
|
47
|
-
i0.ɵɵelementStart(14, "
|
|
48
|
-
i0.ɵɵtext(16, "
|
|
59
|
+
i0.ɵɵelementStart(14, "ion-col")(15, "div", 31);
|
|
60
|
+
i0.ɵɵtext(16, " Ten a la mano tu DPI y sube una foto del frente y reverso de tu documento. ");
|
|
49
61
|
i0.ɵɵelementEnd()()();
|
|
50
|
-
i0.ɵɵelementStart(17, "ion-row")(18, "
|
|
51
|
-
i0.ɵɵelement(19, "img",
|
|
62
|
+
i0.ɵɵelementStart(17, "ion-row", 28)(18, "ion-col", 29);
|
|
63
|
+
i0.ɵɵelement(19, "img", 32);
|
|
52
64
|
i0.ɵɵelementEnd();
|
|
53
|
-
i0.ɵɵelementStart(20, "
|
|
54
|
-
i0.ɵɵtext(22, "Graba un video
|
|
55
|
-
i0.ɵɵelementEnd()()()();
|
|
56
|
-
i0.ɵɵelementStart(23, "div", 31)(24, "ion-button", 18);
|
|
57
|
-
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_2_Template_ion_button_click_24_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.handleClick()); });
|
|
58
|
-
i0.ɵɵtext(25, "Empecemos");
|
|
65
|
+
i0.ɵɵelementStart(20, "ion-col")(21, "div", 31);
|
|
66
|
+
i0.ɵɵtext(22, " Graba un video corto, mant\u00E9n tu rostro dentro del c\u00EDrculo y evita moverte. ");
|
|
59
67
|
i0.ɵɵelementEnd()()()();
|
|
68
|
+
i0.ɵɵelementStart(23, "ion-button", 20);
|
|
69
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_2_Template_ion_button_click_23_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleClick()); });
|
|
70
|
+
i0.ɵɵtext(24, " Empecemos ");
|
|
71
|
+
i0.ɵɵelementEnd()()();
|
|
60
72
|
} }
|
|
61
|
-
function
|
|
62
|
-
const
|
|
63
|
-
i0.ɵɵelementStart(0, "div",
|
|
73
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
75
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "div", 22)(2, "div", 23);
|
|
64
76
|
i0.ɵɵtext(3, "Acuerdo de v\u00EDdeo");
|
|
65
77
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵelementStart(4, "
|
|
67
|
-
i0.ɵɵtext(5, "Graba un
|
|
78
|
+
i0.ɵɵelementStart(4, "div", 24);
|
|
79
|
+
i0.ɵɵtext(5, "Graba un video corto para completar tu proceso de identificaci\u00F3n.");
|
|
68
80
|
i0.ɵɵelementEnd()();
|
|
69
|
-
i0.ɵɵelementStart(6, "ion-grid",
|
|
70
|
-
i0.ɵɵelement(9, "img",
|
|
81
|
+
i0.ɵɵelementStart(6, "ion-grid", 27)(7, "ion-row", 28)(8, "ion-col", 29);
|
|
82
|
+
i0.ɵɵelement(9, "img", 38);
|
|
71
83
|
i0.ɵɵelementEnd();
|
|
72
|
-
i0.ɵɵelementStart(10, "
|
|
73
|
-
i0.ɵɵtext(12, "
|
|
84
|
+
i0.ɵɵelementStart(10, "ion-col")(11, "div", 31);
|
|
85
|
+
i0.ɵɵtext(12, "Tu rostro debe de estar iluminado sin sombra y sin reflejos. ");
|
|
74
86
|
i0.ɵɵelementEnd()()();
|
|
75
|
-
i0.ɵɵelementStart(13, "ion-row")(14, "
|
|
76
|
-
i0.ɵɵelement(15, "img",
|
|
87
|
+
i0.ɵɵelementStart(13, "ion-row", 28)(14, "ion-col", 29);
|
|
88
|
+
i0.ɵɵelement(15, "img", 32);
|
|
77
89
|
i0.ɵɵelementEnd();
|
|
78
|
-
i0.ɵɵelementStart(16, "
|
|
79
|
-
i0.ɵɵtext(18, "
|
|
90
|
+
i0.ɵɵelementStart(16, "ion-col")(17, "div", 31);
|
|
91
|
+
i0.ɵɵtext(18, "No uses anteojos, ni sombreros, tu rostro debe estar visible.");
|
|
80
92
|
i0.ɵɵelementEnd()()()();
|
|
81
|
-
i0.ɵɵelementStart(19, "
|
|
82
|
-
i0.ɵɵlistener("click", function
|
|
83
|
-
i0.ɵɵtext(
|
|
84
|
-
i0.ɵɵelementEnd()()
|
|
93
|
+
i0.ɵɵelementStart(19, "ion-button", 20);
|
|
94
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_2_Template_ion_button_click_19_listener() { i0.ɵɵrestoreView(_r5); const step_r6 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r6.action()); });
|
|
95
|
+
i0.ɵɵtext(20, "Abrir la c\u00E1mara");
|
|
96
|
+
i0.ɵɵelementEnd()();
|
|
85
97
|
} if (rf & 2) {
|
|
86
|
-
const
|
|
87
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1,
|
|
98
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
99
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c2, ctx_r1.simpleProcess));
|
|
88
100
|
} }
|
|
89
|
-
function
|
|
90
|
-
const
|
|
91
|
-
i0.ɵɵelementStart(0, "div")(1, "div",
|
|
92
|
-
i0.ɵɵtext(3, "
|
|
101
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
103
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 22)(2, "div", 23);
|
|
104
|
+
i0.ɵɵtext(3, "DPI frontal");
|
|
93
105
|
i0.ɵɵelementEnd();
|
|
94
|
-
i0.ɵɵelementStart(4, "
|
|
95
|
-
i0.ɵɵtext(5, "
|
|
106
|
+
i0.ɵɵelementStart(4, "div", 24);
|
|
107
|
+
i0.ɵɵtext(5, " Toma una foto de la parte frontal de tu documento, asegurate que este dentro del recuadro, evita sombras y reflejos. ");
|
|
96
108
|
i0.ɵɵelementEnd()();
|
|
97
|
-
i0.ɵɵelementStart(6, "div", 39);
|
|
98
|
-
i0.ɵɵelement(
|
|
99
|
-
i0.ɵɵelementEnd();
|
|
100
|
-
i0.ɵɵelementStart(8, "div", 31)(9, "ion-button", 18);
|
|
101
|
-
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_3_div_3_Template_ion_button_click_9_listener() { i0.ɵɵrestoreView(_r6); const step_r5 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r5.action()); });
|
|
102
|
-
i0.ɵɵtext(10, "Tomar una foto");
|
|
109
|
+
i0.ɵɵelementStart(6, "div", 39)(7, "div", 40)(8, "div", 41);
|
|
110
|
+
i0.ɵɵelement(9, "img", 42);
|
|
103
111
|
i0.ɵɵelementEnd()()();
|
|
112
|
+
i0.ɵɵelementStart(10, "ion-button", 20);
|
|
113
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_3_Template_ion_button_click_10_listener() { i0.ɵɵrestoreView(_r7); const step_r6 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r6.action()); });
|
|
114
|
+
i0.ɵɵtext(11, "Tomar foto");
|
|
115
|
+
i0.ɵɵelementEnd()();
|
|
104
116
|
} }
|
|
105
|
-
function
|
|
106
|
-
const
|
|
107
|
-
i0.ɵɵelementStart(0, "div")(1, "div",
|
|
108
|
-
i0.ɵɵtext(3, "
|
|
117
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
118
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
119
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 22)(2, "div", 23);
|
|
120
|
+
i0.ɵɵtext(3, "DPI reverso");
|
|
109
121
|
i0.ɵɵelementEnd();
|
|
110
|
-
i0.ɵɵelementStart(4, "
|
|
111
|
-
i0.ɵɵtext(5, "
|
|
122
|
+
i0.ɵɵelementStart(4, "div", 24);
|
|
123
|
+
i0.ɵɵtext(5, " Voltea tu documento y toma una foto del reverso de tu documento, asegurate que este dentro del recuadro, evita sombras y reflejos. ");
|
|
112
124
|
i0.ɵɵelementEnd()();
|
|
113
|
-
i0.ɵɵelementStart(6, "div", 39);
|
|
114
|
-
i0.ɵɵelement(
|
|
125
|
+
i0.ɵɵelementStart(6, "div", 39)(7, "div", 40)(8, "div", 41);
|
|
126
|
+
i0.ɵɵelement(9, "img", 42);
|
|
115
127
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵelementStart(
|
|
117
|
-
i0.ɵɵ
|
|
118
|
-
i0.ɵɵtext(10, "Tomar una foto");
|
|
128
|
+
i0.ɵɵelementStart(10, "div", 43);
|
|
129
|
+
i0.ɵɵelement(11, "img", 44);
|
|
119
130
|
i0.ɵɵelementEnd()()();
|
|
131
|
+
i0.ɵɵelementStart(12, "ion-button", 45);
|
|
132
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_4_Template_ion_button_click_12_listener() { i0.ɵɵrestoreView(_r8); const step_r6 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r6.action()); });
|
|
133
|
+
i0.ɵɵtext(13, "Tomar foto ");
|
|
134
|
+
i0.ɵɵelementEnd()();
|
|
135
|
+
} if (rf & 2) {
|
|
136
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
137
|
+
i0.ɵɵadvance(7);
|
|
138
|
+
i0.ɵɵclassProp("flip", ctx_r1.flip);
|
|
139
|
+
i0.ɵɵadvance(5);
|
|
140
|
+
i0.ɵɵproperty("disabled", ctx_r1.waitFlip);
|
|
120
141
|
} }
|
|
121
|
-
function
|
|
122
|
-
const
|
|
123
|
-
i0.ɵɵelementStart(0, "div")(1, "div",
|
|
124
|
-
i0.ɵɵtext(3, "
|
|
142
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
143
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
144
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 22)(2, "div", 23);
|
|
145
|
+
i0.ɵɵtext(3, "Prueba de vida");
|
|
125
146
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(4, "
|
|
127
|
-
i0.ɵɵtext(5, "Graba un
|
|
147
|
+
i0.ɵɵelementStart(4, "div", 24);
|
|
148
|
+
i0.ɵɵtext(5, "Graba un video corto para completar tu proceso de identificaci\u00F3n.");
|
|
128
149
|
i0.ɵɵelementEnd()();
|
|
129
|
-
i0.ɵɵelementStart(6, "ion-grid",
|
|
130
|
-
i0.ɵɵelement(
|
|
150
|
+
i0.ɵɵelementStart(6, "ion-grid", 27)(7, "ion-row", 28)(8, "ion-col", 29);
|
|
151
|
+
i0.ɵɵelement(9, "img", 38);
|
|
131
152
|
i0.ɵɵelementEnd();
|
|
132
|
-
i0.ɵɵelementStart(
|
|
133
|
-
i0.ɵɵtext(
|
|
153
|
+
i0.ɵɵelementStart(10, "ion-col")(11, "div", 31);
|
|
154
|
+
i0.ɵɵtext(12, "Tu rostro debe de estar iluminado sin sombra y sin reflejos.");
|
|
134
155
|
i0.ɵɵelementEnd()()();
|
|
135
|
-
i0.ɵɵelementStart(
|
|
136
|
-
i0.ɵɵelement(
|
|
156
|
+
i0.ɵɵelementStart(13, "ion-row", 28)(14, "ion-col", 29);
|
|
157
|
+
i0.ɵɵelement(15, "img", 32);
|
|
137
158
|
i0.ɵɵelementEnd();
|
|
138
|
-
i0.ɵɵelementStart(
|
|
139
|
-
i0.ɵɵtext(
|
|
140
|
-
i0.ɵɵelementEnd()()()()
|
|
141
|
-
i0.ɵɵelementStart(
|
|
142
|
-
i0.ɵɵlistener("click", function
|
|
143
|
-
i0.ɵɵtext(
|
|
144
|
-
i0.ɵɵelementEnd()()
|
|
159
|
+
i0.ɵɵelementStart(16, "ion-col")(17, "div", 31);
|
|
160
|
+
i0.ɵɵtext(18, "No uses anteojos, ni sombreros, tu rostro debe estar visible.");
|
|
161
|
+
i0.ɵɵelementEnd()()()();
|
|
162
|
+
i0.ɵɵelementStart(19, "ion-button", 20);
|
|
163
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_5_Template_ion_button_click_19_listener() { i0.ɵɵrestoreView(_r9); const step_r6 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r6.action()); });
|
|
164
|
+
i0.ɵɵtext(20, "Abrir la c\u00E1mara");
|
|
165
|
+
i0.ɵɵelementEnd()();
|
|
145
166
|
} }
|
|
146
|
-
function
|
|
147
|
-
const
|
|
148
|
-
i0.ɵɵelementStart(0, "div")(1, "div",
|
|
167
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
169
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 46)(2, "h2", 47);
|
|
149
170
|
i0.ɵɵtext(3, "Foto Selfie");
|
|
150
171
|
i0.ɵɵelementEnd();
|
|
151
|
-
i0.ɵɵelementStart(4, "p",
|
|
172
|
+
i0.ɵɵelementStart(4, "p", 48);
|
|
152
173
|
i0.ɵɵtext(5, "Toma una foto para completar tu proceso de identificaci\u00F3n.");
|
|
153
174
|
i0.ɵɵelementEnd()();
|
|
154
|
-
i0.ɵɵelementStart(6, "ion-grid",
|
|
155
|
-
i0.ɵɵelement(10, "img",
|
|
175
|
+
i0.ɵɵelementStart(6, "ion-grid", 49)(7, "ion-row")(8, "ion-row")(9, "div", 50);
|
|
176
|
+
i0.ɵɵelement(10, "img", 51);
|
|
156
177
|
i0.ɵɵelementEnd();
|
|
157
|
-
i0.ɵɵelementStart(11, "div",
|
|
178
|
+
i0.ɵɵelementStart(11, "div", 52)(12, "p");
|
|
158
179
|
i0.ɵɵtext(13, "Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.");
|
|
159
180
|
i0.ɵɵelementEnd()()();
|
|
160
|
-
i0.ɵɵelementStart(14, "ion-row")(15, "div",
|
|
161
|
-
i0.ɵɵelement(16, "img",
|
|
181
|
+
i0.ɵɵelementStart(14, "ion-row")(15, "div", 50);
|
|
182
|
+
i0.ɵɵelement(16, "img", 53);
|
|
162
183
|
i0.ɵɵelementEnd();
|
|
163
|
-
i0.ɵɵelementStart(17, "div",
|
|
184
|
+
i0.ɵɵelementStart(17, "div", 52)(18, "p");
|
|
164
185
|
i0.ɵɵtext(19, "Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.");
|
|
165
186
|
i0.ɵɵelementEnd()()()()();
|
|
166
|
-
i0.ɵɵelementStart(20, "div",
|
|
167
|
-
i0.ɵɵlistener("click", function
|
|
168
|
-
i0.ɵɵtext(22, "Abrir la c\u00E1mara");
|
|
187
|
+
i0.ɵɵelementStart(20, "div", 54)(21, "ion-button", 55);
|
|
188
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_6_Template_ion_button_click_21_listener() { i0.ɵɵrestoreView(_r10); const step_r6 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r6.action()); });
|
|
189
|
+
i0.ɵɵtext(22, "Abrir la c\u00E1mara ");
|
|
169
190
|
i0.ɵɵelementEnd()()();
|
|
170
191
|
} }
|
|
171
|
-
function
|
|
192
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_13_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
194
|
+
i0.ɵɵelementStart(0, "ion-button", 65);
|
|
195
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_13_Template_ion_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.finalizar()); });
|
|
196
|
+
i0.ɵɵtext(1, " Continuar ");
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
} }
|
|
199
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_14_Template(rf, ctx) { if (rf & 1) {
|
|
200
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
201
|
+
i0.ɵɵelementStart(0, "ion-button", 65);
|
|
202
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_14_Template_ion_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleExit()); });
|
|
203
|
+
i0.ɵɵtext(1, " Salir ");
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
} }
|
|
206
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
207
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 56)(2, "div", 22)(3, "div", 23);
|
|
208
|
+
i0.ɵɵtext(4, "Verificando identidad");
|
|
209
|
+
i0.ɵɵelementEnd()();
|
|
210
|
+
i0.ɵɵelementStart(5, "div", 57)(6, "div", 58);
|
|
211
|
+
i0.ɵɵelement(7, "img", 59)(8, "div", 60);
|
|
212
|
+
i0.ɵɵelementStart(9, "div", 61)(10, "p", 62);
|
|
213
|
+
i0.ɵɵtext(11);
|
|
214
|
+
i0.ɵɵelementEnd()();
|
|
215
|
+
i0.ɵɵelement(12, "ion-progress-bar", 63);
|
|
216
|
+
i0.ɵɵelementEnd()();
|
|
217
|
+
i0.ɵɵtemplate(13, IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_13_Template, 2, 0, "ion-button", 64)(14, IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_ion_button_14_Template, 2, 0, "ion-button", 64);
|
|
218
|
+
i0.ɵɵelementEnd()();
|
|
219
|
+
} if (rf & 2) {
|
|
220
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
221
|
+
i0.ɵɵadvance(7);
|
|
222
|
+
i0.ɵɵpropertyInterpolate("src", ctx_r1.image, i0.ɵɵsanitizeUrl);
|
|
223
|
+
i0.ɵɵadvance(3);
|
|
224
|
+
i0.ɵɵclassProp("show", ctx_r1.showText);
|
|
225
|
+
i0.ɵɵadvance();
|
|
226
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.currentText, " ");
|
|
227
|
+
i0.ɵɵadvance();
|
|
228
|
+
i0.ɵɵproperty("value", ctx_r1.progress);
|
|
229
|
+
i0.ɵɵadvance();
|
|
230
|
+
i0.ɵɵproperty("ngIf", ctx_r1.progress === 1 && ctx_r1.comparsionStatus === "success");
|
|
231
|
+
i0.ɵɵadvance();
|
|
232
|
+
i0.ɵɵproperty("ngIf", ctx_r1.progress === 1 && ctx_r1.comparsionStatus === "error");
|
|
233
|
+
} }
|
|
234
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
172
235
|
i0.ɵɵelementStart(0, "div")(1, "h2");
|
|
173
236
|
i0.ɵɵtext(2, "Paso desconocido");
|
|
174
237
|
i0.ɵɵelementEnd()();
|
|
175
238
|
} }
|
|
176
|
-
function
|
|
177
|
-
i0.ɵɵelementStart(0, "swiper-slide")(1, "div",
|
|
178
|
-
i0.ɵɵtemplate(2,
|
|
239
|
+
function IdVisionComponent_swiper_container_2_swiper_slide_3_Template(rf, ctx) { if (rf & 1) {
|
|
240
|
+
i0.ɵɵelementStart(0, "swiper-slide")(1, "div", 33);
|
|
241
|
+
i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_2_swiper_slide_3_div_2_Template, 21, 3, "div", 34)(3, IdVisionComponent_swiper_container_2_swiper_slide_3_div_3_Template, 12, 0, "div", 35)(4, IdVisionComponent_swiper_container_2_swiper_slide_3_div_4_Template, 14, 3, "div", 35)(5, IdVisionComponent_swiper_container_2_swiper_slide_3_div_5_Template, 21, 0, "div", 35)(6, IdVisionComponent_swiper_container_2_swiper_slide_3_div_6_Template, 23, 0, "div", 35)(7, IdVisionComponent_swiper_container_2_swiper_slide_3_div_7_Template, 15, 7, "div", 35)(8, IdVisionComponent_swiper_container_2_swiper_slide_3_div_8_Template, 3, 0, "div", 36);
|
|
179
242
|
i0.ɵɵelementEnd()();
|
|
180
243
|
} if (rf & 2) {
|
|
181
|
-
const
|
|
182
|
-
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
244
|
+
const step_r6 = ctx.$implicit;
|
|
183
245
|
i0.ɵɵadvance();
|
|
184
|
-
i0.ɵɵproperty("
|
|
246
|
+
i0.ɵɵproperty("ngSwitch", step_r6.type);
|
|
185
247
|
i0.ɵɵadvance();
|
|
186
248
|
i0.ɵɵproperty("ngSwitchCase", 1);
|
|
187
249
|
i0.ɵɵadvance();
|
|
@@ -192,51 +254,54 @@ function IdVisionComponent_swiper_container_1_swiper_slide_3_Template(rf, ctx) {
|
|
|
192
254
|
i0.ɵɵproperty("ngSwitchCase", 4);
|
|
193
255
|
i0.ɵɵadvance();
|
|
194
256
|
i0.ɵɵproperty("ngSwitchCase", 5);
|
|
257
|
+
i0.ɵɵadvance();
|
|
258
|
+
i0.ɵɵproperty("ngSwitchCase", 6);
|
|
195
259
|
} }
|
|
196
|
-
function
|
|
197
|
-
i0.ɵɵelementStart(0, "div",
|
|
260
|
+
function IdVisionComponent_swiper_container_2_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
261
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
|
|
198
262
|
i0.ɵɵtext(2, "Informaci\u00F3n procesada de manera correcta");
|
|
199
263
|
i0.ɵɵelementEnd()();
|
|
200
264
|
} }
|
|
201
|
-
function
|
|
202
|
-
i0.ɵɵelementStart(0, "div",
|
|
203
|
-
i0.ɵɵtext(2, "
|
|
265
|
+
function IdVisionComponent_swiper_container_2_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
266
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
|
|
267
|
+
i0.ɵɵtext(2, "No se pudo procesar la informaci\u00F3n");
|
|
204
268
|
i0.ɵɵelementEnd()();
|
|
205
269
|
} }
|
|
206
|
-
function
|
|
207
|
-
const
|
|
208
|
-
i0.ɵɵelementStart(0, "swiper-container",
|
|
209
|
-
i0.ɵɵ
|
|
210
|
-
i0.ɵɵ
|
|
211
|
-
i0.ɵɵ
|
|
212
|
-
i0.ɵɵ
|
|
213
|
-
i0.ɵɵ
|
|
270
|
+
function IdVisionComponent_swiper_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
272
|
+
i0.ɵɵelementStart(0, "swiper-container", 13, 0);
|
|
273
|
+
i0.ɵɵlistener("swiperslidechange", function IdVisionComponent_swiper_container_2_Template_swiper_container_swiperslidechange_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSlideChange()); });
|
|
274
|
+
i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_2_swiper_slide_2_Template, 25, 0, "swiper-slide", 14)(3, IdVisionComponent_swiper_container_2_swiper_slide_3_Template, 9, 7, "swiper-slide", 15);
|
|
275
|
+
i0.ɵɵelementStart(4, "swiper-slide")(5, "div", 16);
|
|
276
|
+
i0.ɵɵtemplate(6, IdVisionComponent_swiper_container_2_div_6_Template, 3, 0, "div", 17)(7, IdVisionComponent_swiper_container_2_div_7_Template, 3, 0, "div", 17);
|
|
277
|
+
i0.ɵɵelementStart(8, "div", 18);
|
|
278
|
+
i0.ɵɵelement(9, "img", 19);
|
|
214
279
|
i0.ɵɵelementEnd();
|
|
215
|
-
i0.ɵɵelementStart(10, "
|
|
216
|
-
i0.ɵɵlistener("click", function
|
|
217
|
-
i0.ɵɵtext(
|
|
218
|
-
i0.ɵɵelementEnd()()()()
|
|
280
|
+
i0.ɵɵelementStart(10, "ion-button", 20);
|
|
281
|
+
i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_2_Template_ion_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleExit()); });
|
|
282
|
+
i0.ɵɵtext(11, "Continuar");
|
|
283
|
+
i0.ɵɵelementEnd()()()();
|
|
219
284
|
} if (rf & 2) {
|
|
220
|
-
const
|
|
285
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
221
286
|
i0.ɵɵadvance(2);
|
|
222
|
-
i0.ɵɵproperty("ngIf", !
|
|
287
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.simpleProcess);
|
|
223
288
|
i0.ɵɵadvance();
|
|
224
|
-
i0.ɵɵproperty("ngForOf",
|
|
289
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.validationConfig);
|
|
225
290
|
i0.ɵɵadvance(3);
|
|
226
|
-
i0.ɵɵproperty("ngIf",
|
|
291
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isValid);
|
|
227
292
|
i0.ɵɵadvance();
|
|
228
|
-
i0.ɵɵproperty("ngIf", !
|
|
293
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.isValid);
|
|
229
294
|
} }
|
|
230
|
-
function
|
|
231
|
-
const
|
|
232
|
-
i0.ɵɵelementStart(0, "ion-fab",
|
|
233
|
-
i0.ɵɵlistener("click", function
|
|
234
|
-
i0.ɵɵelement(2, "ion-icon",
|
|
295
|
+
function IdVisionComponent_ion_fab_5_Template(rf, ctx) { if (rf & 1) {
|
|
296
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
297
|
+
i0.ɵɵelementStart(0, "ion-fab", 66)(1, "ion-fab-button", 67);
|
|
298
|
+
i0.ɵɵlistener("click", function IdVisionComponent_ion_fab_5_Template_ion_fab_button_click_1_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.copyProccess()); });
|
|
299
|
+
i0.ɵɵelement(2, "ion-icon", 68);
|
|
235
300
|
i0.ɵɵelementEnd()();
|
|
236
301
|
} }
|
|
237
302
|
register();
|
|
238
303
|
export class IdVisionComponent {
|
|
239
|
-
constructor(modalController, alertController, platform, modalDpiServices, sdkCommunicationService, navController, cdRef, toastController, loadingController, configurationService, validationService, navigationService, processingService, dpiService) {
|
|
304
|
+
constructor(modalController, alertController, platform, modalDpiServices, sdkCommunicationService, navController, cdRef, toastController, loadingController, configurationService, validationService, navigationService, processingService, dpiService, elementRef, virtualCameraDetectionService) {
|
|
240
305
|
this.modalController = modalController;
|
|
241
306
|
this.alertController = alertController;
|
|
242
307
|
this.platform = platform;
|
|
@@ -251,6 +316,8 @@ export class IdVisionComponent {
|
|
|
251
316
|
this.navigationService = navigationService;
|
|
252
317
|
this.processingService = processingService;
|
|
253
318
|
this.dpiService = dpiService;
|
|
319
|
+
this.elementRef = elementRef;
|
|
320
|
+
this.virtualCameraDetectionService = virtualCameraDetectionService;
|
|
254
321
|
// Tutorial images
|
|
255
322
|
this.tutoImage1 = 'assets/imagesIdvision/documentsImage.png';
|
|
256
323
|
this.tutoImage2 = 'assets/imagesIdvision/documentsImage.png';
|
|
@@ -259,6 +326,7 @@ export class IdVisionComponent {
|
|
|
259
326
|
// Component inputs
|
|
260
327
|
this.isSwipe = false;
|
|
261
328
|
this.dpiCode = '';
|
|
329
|
+
this.dpiCodeSecond = 'N/A';
|
|
262
330
|
this.connection = '';
|
|
263
331
|
this.apikey = '';
|
|
264
332
|
this.env = '';
|
|
@@ -278,27 +346,47 @@ export class IdVisionComponent {
|
|
|
278
346
|
dpiFront: false,
|
|
279
347
|
dpiBack: false,
|
|
280
348
|
videoSelfie: false,
|
|
281
|
-
photoSelfie: false
|
|
349
|
+
photoSelfie: false,
|
|
350
|
+
validateFace: false
|
|
282
351
|
};
|
|
283
352
|
this.stepVisibility = {
|
|
284
353
|
showAcuerdoVideo: false,
|
|
285
354
|
showDpiFront: false,
|
|
286
355
|
showDpiBack: false,
|
|
287
356
|
showVideoSelfie: false,
|
|
288
|
-
showPhotoSelfie: false
|
|
357
|
+
showPhotoSelfie: false,
|
|
358
|
+
showValidationFace: false
|
|
289
359
|
};
|
|
290
360
|
this.isValid = false;
|
|
291
361
|
this.configEnv = { env_endpoint: '', error: false };
|
|
292
362
|
this.loadingElement = null;
|
|
363
|
+
this.flip = false;
|
|
364
|
+
this.waitFlip = true;
|
|
365
|
+
this.progress = 0;
|
|
366
|
+
this.image = '';
|
|
367
|
+
this.isInitCameraBlocked = false;
|
|
368
|
+
this.initCameraBlockReason = '';
|
|
369
|
+
this.texts = [
|
|
370
|
+
'Analizando rostro...',
|
|
371
|
+
'Comparando rostro contra DPI anterior...'
|
|
372
|
+
];
|
|
373
|
+
this.successText = 'Verificación completada';
|
|
374
|
+
this.errorText = 'No se pudo verificar la identidad';
|
|
375
|
+
this.currentText = '';
|
|
376
|
+
this.showText = false;
|
|
377
|
+
this.index = 0;
|
|
378
|
+
this.comparsionStatus = 'none';
|
|
293
379
|
this.isAndroid = this.platform.is('android');
|
|
294
380
|
this.isIOS = this.platform.is('ios');
|
|
295
|
-
// Bind de los event handlers UNA SOLA VEZ en el constructor
|
|
296
|
-
// this.boundOnBackButton = this.onBackButton.bind(this);
|
|
297
381
|
this.boundOnBeforeUnload = this.onBeforeUnload.bind(this);
|
|
298
382
|
this.boundOnPopState = this.onPopState.bind(this);
|
|
299
383
|
}
|
|
300
384
|
async ngOnInit() {
|
|
301
385
|
try {
|
|
386
|
+
await this.logAvailableVideoInputsOnInit();
|
|
387
|
+
const canContinue = await this.evaluateInitialCameraSecurity();
|
|
388
|
+
if (!canContinue)
|
|
389
|
+
return;
|
|
302
390
|
// Ejecutar tareas en paralelo para mejor rendimiento
|
|
303
391
|
const [configResult, sdkVersion] = await Promise.all([
|
|
304
392
|
this.getURL(this.env == "" || this.env == null ? "PROD_IT_01" : this.env),
|
|
@@ -309,25 +397,17 @@ export class IdVisionComponent {
|
|
|
309
397
|
this.versionSDK = sdkVersion;
|
|
310
398
|
if (!this.configEnv.error) {
|
|
311
399
|
const stepActionMapper = (type) => this.getStepAction(type);
|
|
312
|
-
const validationResponse = await this.configurationService.loadValidationConfiguration(this.connection, this.configEnv, stepActionMapper);
|
|
400
|
+
const validationResponse = await this.configurationService.loadValidationConfiguration(this.connection, this.apikey, this.configEnv, stepActionMapper);
|
|
313
401
|
this.typeProccess = validationResponse.typeProccess;
|
|
314
402
|
this.validationConfig = validationResponse.steps;
|
|
315
|
-
console.log('validationConfig', this.validationConfig);
|
|
316
|
-
console.log('typeProccess', this.typeProccess);
|
|
317
403
|
if (this.typeProccess === "BiometricToken") {
|
|
318
404
|
this.simpleProcess = true;
|
|
319
|
-
// Deshabilitar botón de atrás para simpleProcess
|
|
320
|
-
// this.disableBackButton();
|
|
321
405
|
await this.showLoading();
|
|
322
|
-
// Configurar para simpleProcess usando la configuración real
|
|
323
406
|
await this.loadSimpleProcessConfig();
|
|
324
407
|
this.setupModalSubscriptions();
|
|
325
408
|
await this.InitProccess();
|
|
326
409
|
await this.hideLoading();
|
|
327
|
-
// Pequeño delay para asegurar que el loading se cierre completamente
|
|
328
410
|
await new Promise(resolve => setTimeout(resolve, 100));
|
|
329
|
-
// NO llamar a executeFirstAvailableAction aquí - ya se llama dentro de InitProccess
|
|
330
|
-
// executeFirstAvailableAction() se ejecuta automáticamente en InitProccess cuando no hay continuation
|
|
331
411
|
}
|
|
332
412
|
else {
|
|
333
413
|
// Proceso normal completo
|
|
@@ -339,58 +419,19 @@ export class IdVisionComponent {
|
|
|
339
419
|
}
|
|
340
420
|
else {
|
|
341
421
|
await this.hideLoading();
|
|
342
|
-
alert('Error en opción de ambiente');
|
|
422
|
+
//alert('Error en opción de ambiente');
|
|
343
423
|
}
|
|
344
|
-
// if (this.simpleProcess) {
|
|
345
|
-
// // Para simpleProcess, mostrar loading nativo de Ionic
|
|
346
|
-
// await this.showLoading();
|
|
347
|
-
// if (!this.configEnv.error) {
|
|
348
|
-
// this.setupModalSubscriptions();
|
|
349
|
-
// await this.InitProccess();
|
|
350
|
-
// // Configuración rápida para simpleProcess
|
|
351
|
-
// await this.loadSimpleProcessConfig();
|
|
352
|
-
// await this.hideLoading();
|
|
353
|
-
// await this.openPhotoSelfie();
|
|
354
|
-
// } else {
|
|
355
|
-
// alert('Error en opción de ambiente');
|
|
356
|
-
// }
|
|
357
|
-
// } else {
|
|
358
|
-
// if (!this.configEnv.error) {
|
|
359
|
-
// await this.loadMockValidationConfig();
|
|
360
|
-
// // Obtener versión del SDK
|
|
361
|
-
// if (this.isAndroid || this.isIOS) {
|
|
362
|
-
// const info = await App.getInfo();
|
|
363
|
-
// this.versionSDK = info.version;
|
|
364
|
-
// } else {
|
|
365
|
-
// this.versionSDK = 'web';
|
|
366
|
-
// }
|
|
367
|
-
// this.setupModalSubscriptions();
|
|
368
|
-
// } else {
|
|
369
|
-
// alert('Error en opción de ambiente');
|
|
370
|
-
// }
|
|
371
|
-
// }
|
|
372
424
|
}
|
|
373
425
|
catch (error) {
|
|
374
426
|
await this.hideLoading();
|
|
375
|
-
console.
|
|
427
|
+
console.log('Error en inicialización:', error);
|
|
376
428
|
}
|
|
377
429
|
}
|
|
378
430
|
ngAfterViewInit() {
|
|
379
|
-
console.log('🟢 [Component] ngAfterViewInit() llamado');
|
|
380
|
-
console.log('🟢 [Component] simpleProcess:', this.simpleProcess);
|
|
381
|
-
console.log('🟢 [Component] swiperContainerRef:', this.swiperContainerRef);
|
|
382
|
-
console.log('🟢 [Component] swiperContainerRef?.nativeElement:', this.swiperContainerRef?.nativeElement);
|
|
383
|
-
// Solo inicializar si el swiper está en el DOM
|
|
384
431
|
if (this.swiperContainerRef && !this.simpleProcess) {
|
|
385
|
-
console.log('✅ [Component] Condiciones cumplidas, inicializando Swiper...');
|
|
386
|
-
console.log('✅ [Component] Pasando elemento al servicio:', this.swiperContainerRef.nativeElement);
|
|
387
432
|
this.navigationService.initializeSwiper(this.swiperContainerRef.nativeElement);
|
|
388
433
|
this.swiperElement.set(this.navigationService.getSwiperRef());
|
|
389
434
|
}
|
|
390
|
-
else {
|
|
391
|
-
console.warn('⚠️ [Component] SwiperContainer no está disponible en ngAfterViewInit');
|
|
392
|
-
console.warn('⚠️ [Component] Razón: swiperContainerRef =', !!this.swiperContainerRef, ', simpleProcess =', this.simpleProcess);
|
|
393
|
-
}
|
|
394
435
|
if (this.dpi) {
|
|
395
436
|
this.dpi.value = this.dpiCode ?? '';
|
|
396
437
|
}
|
|
@@ -403,78 +444,6 @@ export class IdVisionComponent {
|
|
|
403
444
|
// Rehabilitar el botón de atrás al salir del componente
|
|
404
445
|
this.enableBackButton();
|
|
405
446
|
}
|
|
406
|
-
// Handler para cancelar el proceso completamente
|
|
407
|
-
handleCancelProcess() {
|
|
408
|
-
try {
|
|
409
|
-
console.log('🔄 Usuario canceló el proceso');
|
|
410
|
-
// IMPORTANTE: Deshabilitar listeners del botón de atrás
|
|
411
|
-
this.enableBackButton();
|
|
412
|
-
console.log('✅ Listeners del botón de atrás deshabilitados');
|
|
413
|
-
// Limpiar cualquier loader activo
|
|
414
|
-
this.dpiService.forceCloseAllLoaders();
|
|
415
|
-
// Emitir resultado falso al SDK
|
|
416
|
-
this.sdkCommunicationService.emitExit(false);
|
|
417
|
-
console.log('✅ Resultado false enviado al SDK padre');
|
|
418
|
-
console.log('⚠️ La app padre debe manejar el cierre del componente <app-id-vision>');
|
|
419
|
-
}
|
|
420
|
-
catch (error) {
|
|
421
|
-
console.error('❌ Error al cancelar proceso:', error);
|
|
422
|
-
// Intentar emitir de todos modos
|
|
423
|
-
try {
|
|
424
|
-
this.sdkCommunicationService.emitExit(false);
|
|
425
|
-
}
|
|
426
|
-
catch (e) {
|
|
427
|
-
console.error('❌ No se pudo emitir resultado:', e);
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
// Método para mostrar modal de confirmación de cancelación
|
|
432
|
-
async showCancelConfirmationModal() {
|
|
433
|
-
const alert = await this.alertController.create({
|
|
434
|
-
header: 'Cancelar proceso',
|
|
435
|
-
message: '¿Estás seguro que deseas cancelar el proceso de validación?',
|
|
436
|
-
backdropDismiss: false,
|
|
437
|
-
buttons: [
|
|
438
|
-
{
|
|
439
|
-
text: 'No, continuar',
|
|
440
|
-
role: 'cancel',
|
|
441
|
-
cssClass: 'alert-button-cancel'
|
|
442
|
-
},
|
|
443
|
-
{
|
|
444
|
-
text: 'Sí, cancelar',
|
|
445
|
-
role: 'confirm',
|
|
446
|
-
cssClass: 'alert-button-confirm'
|
|
447
|
-
}
|
|
448
|
-
]
|
|
449
|
-
});
|
|
450
|
-
await alert.present();
|
|
451
|
-
const { role } = await alert.onDidDismiss();
|
|
452
|
-
if (role === 'confirm') {
|
|
453
|
-
console.log('🚪 Usuario confirmó cancelación del proceso');
|
|
454
|
-
return true;
|
|
455
|
-
}
|
|
456
|
-
else {
|
|
457
|
-
console.log('🔄 Usuario decidió continuar con el proceso');
|
|
458
|
-
return false;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
// Método para deshabilitar el botón de atrás en simpleProcess
|
|
462
|
-
disableBackButton() {
|
|
463
|
-
// Evitar duplicación de listeners
|
|
464
|
-
if (this.backButtonListenerActive) {
|
|
465
|
-
console.log('⚠️ Back button listeners ya están activos');
|
|
466
|
-
return;
|
|
467
|
-
}
|
|
468
|
-
console.log('🔒 Deshabilitando botón de atrás');
|
|
469
|
-
if (this.platform.is('android')) {
|
|
470
|
-
// Para Android, interceptar el botón de atrás físico
|
|
471
|
-
// document.addEventListener('backbutton', this.boundOnBackButton, false);
|
|
472
|
-
}
|
|
473
|
-
// Para todas las plataformas, interceptar la navegación del navegador
|
|
474
|
-
window.addEventListener('beforeunload', this.boundOnBeforeUnload);
|
|
475
|
-
window.addEventListener('popstate', this.boundOnPopState);
|
|
476
|
-
this.backButtonListenerActive = true;
|
|
477
|
-
}
|
|
478
447
|
// Método para rehabilitar el botón de atrás
|
|
479
448
|
enableBackButton() {
|
|
480
449
|
if (!this.backButtonListenerActive) {
|
|
@@ -489,22 +458,6 @@ export class IdVisionComponent {
|
|
|
489
458
|
window.removeEventListener('popstate', this.boundOnPopState);
|
|
490
459
|
this.backButtonListenerActive = false;
|
|
491
460
|
}
|
|
492
|
-
// Handler para el botón de atrás en Android
|
|
493
|
-
// private async onBackButton(event: Event): Promise<void> {
|
|
494
|
-
// console.log('� Botón de atrás presionado');
|
|
495
|
-
// event.preventDefault();
|
|
496
|
-
// event.stopPropagation();
|
|
497
|
-
// // Mostrar modal de confirmación
|
|
498
|
-
// const shouldCancel = await this.showCancelConfirmationModal();
|
|
499
|
-
// if (shouldCancel) {
|
|
500
|
-
// // Usuario confirmó la cancelación
|
|
501
|
-
// console.log('❌ Proceso cancelado por el usuario');
|
|
502
|
-
// this.handleCancelProcess();
|
|
503
|
-
// } else {
|
|
504
|
-
// // Usuario decidió continuar
|
|
505
|
-
// console.log('✅ Usuario decidió continuar');
|
|
506
|
-
// }
|
|
507
|
-
// }
|
|
508
461
|
// Handler para beforeunload
|
|
509
462
|
onBeforeUnload(event) {
|
|
510
463
|
console.log('🚫 Navegación bloqueada en simpleProcess');
|
|
@@ -575,7 +528,7 @@ export class IdVisionComponent {
|
|
|
575
528
|
}
|
|
576
529
|
// Forzar cierre de TODOS los loadings que puedan estar activos
|
|
577
530
|
let attempts = 0;
|
|
578
|
-
const maxAttempts =
|
|
531
|
+
const maxAttempts = 4;
|
|
579
532
|
while (attempts < maxAttempts) {
|
|
580
533
|
try {
|
|
581
534
|
console.log(`🔄 Verificando top loader (intento ${attempts + 1})...`);
|
|
@@ -624,10 +577,13 @@ export class IdVisionComponent {
|
|
|
624
577
|
// Usar la configuración real obtenida del servicio, pero solo el primer paso [0]
|
|
625
578
|
if (this.validationConfig && this.validationConfig.length > 0) {
|
|
626
579
|
const firstStep = this.validationConfig[0]; // Siempre usar el primer paso
|
|
627
|
-
//
|
|
580
|
+
// Mapear acciones específicas según el tipo
|
|
628
581
|
if (firstStep.type === 5) {
|
|
629
582
|
firstStep.action = () => this.openPhotoSelfie();
|
|
630
583
|
}
|
|
584
|
+
else if (firstStep.type === 6) {
|
|
585
|
+
firstStep.action = () => this.openFacialValidation();
|
|
586
|
+
}
|
|
631
587
|
// Asegurar que solo tenemos un único paso
|
|
632
588
|
this.validationConfig = [firstStep];
|
|
633
589
|
}
|
|
@@ -647,14 +603,16 @@ export class IdVisionComponent {
|
|
|
647
603
|
showDpiFront: stepType === 2,
|
|
648
604
|
showDpiBack: stepType === 3,
|
|
649
605
|
showVideoSelfie: stepType === 4,
|
|
650
|
-
showPhotoSelfie: stepType === 5
|
|
606
|
+
showPhotoSelfie: stepType === 5,
|
|
607
|
+
showValidationFace: stepType === 6
|
|
651
608
|
};
|
|
652
609
|
this.validateMetaG = {
|
|
653
610
|
acuerdoVideo: false,
|
|
654
611
|
dpiFront: false,
|
|
655
612
|
dpiBack: false,
|
|
656
613
|
videoSelfie: false,
|
|
657
|
-
photoSelfie: false
|
|
614
|
+
photoSelfie: false,
|
|
615
|
+
validateFace: false
|
|
658
616
|
};
|
|
659
617
|
this.isValid = false;
|
|
660
618
|
}
|
|
@@ -690,7 +648,7 @@ export class IdVisionComponent {
|
|
|
690
648
|
else {
|
|
691
649
|
// Proceso normal con servicio
|
|
692
650
|
const stepActionMapper = (type) => this.getStepAction(type);
|
|
693
|
-
const validationResponse = await this.configurationService.loadValidationConfiguration(this.connection, this.configEnv, stepActionMapper);
|
|
651
|
+
const validationResponse = await this.configurationService.loadValidationConfiguration(this.connection, this.apikey, this.configEnv, stepActionMapper);
|
|
694
652
|
this.typeProccess = validationResponse.typeProccess;
|
|
695
653
|
this.validationConfig = validationResponse.steps;
|
|
696
654
|
}
|
|
@@ -728,19 +686,17 @@ export class IdVisionComponent {
|
|
|
728
686
|
}
|
|
729
687
|
getStepAction(type) {
|
|
730
688
|
const actions = {
|
|
689
|
+
0: () => this.openAcuerdoVideoNew(),
|
|
731
690
|
1: () => this.openSimpleAcuerdo(),
|
|
732
691
|
2: () => this.openCameraOverlayFrontal(),
|
|
733
692
|
3: () => this.openCameraOverlayTrasero(),
|
|
734
693
|
4: () => this.openVideoSelfie(),
|
|
735
694
|
5: () => this.openPhotoSelfie(),
|
|
736
|
-
6: () => this.
|
|
695
|
+
6: () => this.openFacialValidation(),
|
|
696
|
+
7: () => this.openAcuerdoVideo(),
|
|
737
697
|
};
|
|
738
698
|
return this.configurationService.getStepAction(type, actions);
|
|
739
699
|
}
|
|
740
|
-
getSlideIndexForType(type) {
|
|
741
|
-
const stepIndex = this.validationConfig.findIndex(step => step.type === type);
|
|
742
|
-
return stepIndex >= 0 ? stepIndex + 1 : 1; // +1 porque el slide 0 es el inicial
|
|
743
|
-
}
|
|
744
700
|
// Navigation methods
|
|
745
701
|
handleClick() {
|
|
746
702
|
this.InitProccess();
|
|
@@ -748,15 +704,6 @@ export class IdVisionComponent {
|
|
|
748
704
|
async handleSlide(slide) {
|
|
749
705
|
this.navigationService.navigateToSlide(slide);
|
|
750
706
|
}
|
|
751
|
-
handleGetInit() {
|
|
752
|
-
this.navigationService.navigateToStart();
|
|
753
|
-
}
|
|
754
|
-
handleNext() {
|
|
755
|
-
this.navigationService.navigateNext();
|
|
756
|
-
}
|
|
757
|
-
handleSkipTutorial() {
|
|
758
|
-
this.navigationService.skipTutorial();
|
|
759
|
-
}
|
|
760
707
|
moveToNextStep(currentType) {
|
|
761
708
|
this.navigationService.moveToNextStep(currentType);
|
|
762
709
|
}
|
|
@@ -777,20 +724,11 @@ export class IdVisionComponent {
|
|
|
777
724
|
try {
|
|
778
725
|
// Cerrar cualquier loading pendiente
|
|
779
726
|
await this.hideLoading();
|
|
780
|
-
console.log('✅ Loading cerrado');
|
|
781
727
|
// IMPORTANTE: Deshabilitar listeners del botón de atrás cuando el proceso termina
|
|
782
728
|
this.enableBackButton();
|
|
783
|
-
console.log('✅ Listeners del botón de atrás deshabilitados');
|
|
784
|
-
// Enviar resultado al SDK padre
|
|
785
|
-
console.log('🔔 Emitiendo resultado a través de sdkCommunicationService...');
|
|
786
729
|
this.sdkCommunicationService.emitExit(result);
|
|
787
|
-
console.log(`✅ Resultado ${result} enviado al SDK padre`);
|
|
788
|
-
console.log('⚠️ La app padre debe ocultar el componente <app-id-vision> escuchando onExit$');
|
|
789
|
-
console.log('⚠️ Si no se oculta, verificar que la app padre tenga:');
|
|
790
|
-
console.log(' this.sdkCommunicationService.onExit$.subscribe(result => { showSDK = false; })');
|
|
791
730
|
}
|
|
792
731
|
catch (error) {
|
|
793
|
-
console.error('Error en handleExitWithResult:', error);
|
|
794
732
|
// Intentar emitir de todos modos
|
|
795
733
|
try {
|
|
796
734
|
this.sdkCommunicationService.emitExit(result);
|
|
@@ -803,13 +741,10 @@ export class IdVisionComponent {
|
|
|
803
741
|
// Método para forzar el cierre del SDK de manera agresiva
|
|
804
742
|
// Processing methods
|
|
805
743
|
async InitProccess() {
|
|
806
|
-
// Debug: Verificar que configEnv tenga la URL correcta
|
|
807
|
-
console.log('🔍 InitProccess - configEnv:', this.configEnv);
|
|
808
|
-
console.log('🔍 InitProccess - URL endpoint:', this.configEnv?.env_endpoint);
|
|
809
|
-
console.log('🔍 InitProccess - simpleProcess:', this.simpleProcess);
|
|
810
744
|
try {
|
|
811
745
|
const response = await this.processingService.initProcess(this.dpiCode + '', this.connection, this.apikey, this.versionSDK, this.configEnv);
|
|
812
746
|
if (!response.error) {
|
|
747
|
+
this.image = response.datos['FOTO'] || '';
|
|
813
748
|
if (response.continuation) {
|
|
814
749
|
const completedItem = this.validationService.processContinuationStatus(response.statusAct || []);
|
|
815
750
|
if (this.simpleProcess) {
|
|
@@ -835,11 +770,18 @@ export class IdVisionComponent {
|
|
|
835
770
|
}
|
|
836
771
|
}
|
|
837
772
|
else {
|
|
838
|
-
|
|
773
|
+
const isUndefinedError = (response.message ?? '').toLowerCase().includes("cannot read properties of undefined (reading '0')");
|
|
774
|
+
if (isUndefinedError) {
|
|
775
|
+
await this.handleExitWithResult(false, 'init-process-error');
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
this.handleInitProcessError(response.message || 'Intente nuevamente.');
|
|
839
779
|
}
|
|
840
780
|
}
|
|
841
781
|
catch (error) {
|
|
842
|
-
console.
|
|
782
|
+
console.log('Error en InitProcess:', error);
|
|
783
|
+
//this.handleInitProcessError('Intente nuevamente.');
|
|
784
|
+
await this.handleExitWithResult(false, 'init-process-error');
|
|
843
785
|
}
|
|
844
786
|
}
|
|
845
787
|
executeFirstAvailableAction() {
|
|
@@ -867,31 +809,37 @@ export class IdVisionComponent {
|
|
|
867
809
|
}
|
|
868
810
|
getValidationKeyForType(type) {
|
|
869
811
|
switch (type) {
|
|
870
|
-
case 1:
|
|
871
|
-
|
|
872
|
-
case
|
|
873
|
-
|
|
874
|
-
case
|
|
875
|
-
|
|
812
|
+
case 1:
|
|
813
|
+
return 'acuerdoVideo';
|
|
814
|
+
case 2:
|
|
815
|
+
return 'dpiFront';
|
|
816
|
+
case 3:
|
|
817
|
+
return 'dpiBack';
|
|
818
|
+
case 4:
|
|
819
|
+
return 'videoSelfie';
|
|
820
|
+
case 5:
|
|
821
|
+
return 'photoSelfie';
|
|
822
|
+
case 6:
|
|
823
|
+
return 'validateFace';
|
|
824
|
+
default:
|
|
825
|
+
return null;
|
|
876
826
|
}
|
|
877
827
|
}
|
|
878
|
-
handleInitProcessError(message) {
|
|
879
|
-
const dpiValue = this.
|
|
828
|
+
async handleInitProcessError(message) {
|
|
829
|
+
const dpiValue = this.dpiCode ?? '';
|
|
880
830
|
if (!dpiValue || dpiValue.trim().length === 0) {
|
|
881
|
-
this.showAlert('
|
|
831
|
+
this.showAlert('¡Lo sentimos!', 'El campo DPI no puede estar vacío', []);
|
|
882
832
|
}
|
|
883
833
|
else if (dpiValue.length > 12) {
|
|
884
|
-
this.showAlert('
|
|
834
|
+
this.showAlert('¡Lo sentimos!', message, []);
|
|
885
835
|
}
|
|
886
836
|
else {
|
|
887
|
-
this.showAlert('
|
|
837
|
+
this.showAlert('¡Lo sentimos!', message, []);
|
|
888
838
|
}
|
|
839
|
+
await this.handleExitWithResult(false, 'init-process-error');
|
|
889
840
|
}
|
|
890
841
|
// DPI Processing methods
|
|
891
842
|
async DpiFrontProccess(filePath) {
|
|
892
|
-
// Debug: Verificar que configEnv tenga la URL correcta
|
|
893
|
-
console.log('🔍 DpiFrontProccess - configEnv:', this.configEnv);
|
|
894
|
-
console.log('🔍 DpiFrontProccess - URL endpoint:', this.configEnv?.env_endpoint);
|
|
895
843
|
try {
|
|
896
844
|
// El loading se maneja completamente dentro del ProcessingService
|
|
897
845
|
const result = await this.processingService.processFrontDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
|
|
@@ -915,9 +863,6 @@ export class IdVisionComponent {
|
|
|
915
863
|
}
|
|
916
864
|
}
|
|
917
865
|
async DpiBackProccess(filePath) {
|
|
918
|
-
// Debug: Verificar que configEnv tenga la URL correcta
|
|
919
|
-
console.log('🔍 DpiBackProccess - configEnv:', this.configEnv);
|
|
920
|
-
console.log('🔍 DpiBackProccess - URL endpoint:', this.configEnv?.env_endpoint);
|
|
921
866
|
try {
|
|
922
867
|
// El loading se maneja completamente dentro del ProcessingService
|
|
923
868
|
const result = await this.processingService.processBackDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
|
|
@@ -965,12 +910,6 @@ export class IdVisionComponent {
|
|
|
965
910
|
}
|
|
966
911
|
else {
|
|
967
912
|
this.validationService.updateValidationStep('videoSelfie', false);
|
|
968
|
-
// if (result.shouldResumeCamera) {
|
|
969
|
-
// this.closeModalVideoSelfie();
|
|
970
|
-
// } else {
|
|
971
|
-
// this.sdkCommunicationService.emitExit(false);
|
|
972
|
-
// this.navController.back();
|
|
973
|
-
// }
|
|
974
913
|
this.closeModalVideoSelfie();
|
|
975
914
|
}
|
|
976
915
|
}
|
|
@@ -980,11 +919,6 @@ export class IdVisionComponent {
|
|
|
980
919
|
}
|
|
981
920
|
// Photo Selfie Processing
|
|
982
921
|
async photoVideoSelfieFile(filePath) {
|
|
983
|
-
console.log('🔄 Iniciando procesamiento de foto selfie...');
|
|
984
|
-
// Debug: Verificar que configEnv tenga la URL correcta
|
|
985
|
-
console.log('🔍 photoVideoSelfieFile - configEnv:', this.configEnv);
|
|
986
|
-
console.log('🔍 photoVideoSelfieFile - URL endpoint:', this.configEnv?.env_endpoint);
|
|
987
|
-
console.log('🔍 photoVideoSelfieFile - simpleProcess:', this.simpleProcess);
|
|
988
922
|
try {
|
|
989
923
|
// El loading se maneja completamente dentro del ProcessingService
|
|
990
924
|
const result = await this.processingService.processPhotoSelfie(filePath, this.connection, this.apikey, this.configEnv, this.simpleProcess, // Pasar flag de proceso simple
|
|
@@ -1023,17 +957,17 @@ export class IdVisionComponent {
|
|
|
1023
957
|
// Acuerdo Video Processing
|
|
1024
958
|
async getAcuerdoVideo(file) {
|
|
1025
959
|
try {
|
|
1026
|
-
const result = await this.processingService.processAcuerdoVideo(file);
|
|
960
|
+
const result = await this.processingService.processAcuerdoVideo(this.connection, this.apikey, this.configEnv, file);
|
|
1027
961
|
if (result.success) {
|
|
1028
962
|
this.closeModalAcuerdoVideo();
|
|
1029
963
|
this.modalController.dismiss();
|
|
1030
964
|
this.validationService.updateValidationStep('acuerdoVideo', true);
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
else {
|
|
1035
|
-
|
|
1036
|
-
}
|
|
965
|
+
await this.handleExitWithResult(true, 'acuerdo-video-close');
|
|
966
|
+
/*if (this.simpleProcess) {
|
|
967
|
+
//this.executeNextActionForSimpleProcess(1);
|
|
968
|
+
} else {
|
|
969
|
+
this.moveToNextStep(0);
|
|
970
|
+
}*/
|
|
1037
971
|
}
|
|
1038
972
|
else {
|
|
1039
973
|
this.validationService.updateValidationStep('acuerdoVideo', false);
|
|
@@ -1043,6 +977,75 @@ export class IdVisionComponent {
|
|
|
1043
977
|
console.error('Error processing acuerdo video:', error);
|
|
1044
978
|
}
|
|
1045
979
|
}
|
|
980
|
+
// Facial Validation Processing
|
|
981
|
+
async openFacialValidation2() {
|
|
982
|
+
console.log('🎯 Iniciando validación facial automática...');
|
|
983
|
+
// Ejecutar directamente el proceso sin modal (es automático)
|
|
984
|
+
await this.processFacialValidation();
|
|
985
|
+
}
|
|
986
|
+
async processFacialValidation() {
|
|
987
|
+
console.log('🔍 processFacialValidation - iniciando...');
|
|
988
|
+
try {
|
|
989
|
+
// Mostrar loading con animación
|
|
990
|
+
await this.showLoading('Validando rostro...');
|
|
991
|
+
// Iniciar animación y progreso
|
|
992
|
+
setTimeout(() => {
|
|
993
|
+
//this.startScanAnimation();
|
|
994
|
+
}, 300);
|
|
995
|
+
// Preparar el payload
|
|
996
|
+
const payload = {
|
|
997
|
+
endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
|
|
998
|
+
headers: {
|
|
999
|
+
apiKey: this.apikey,
|
|
1000
|
+
connectionMg: this.connection
|
|
1001
|
+
},
|
|
1002
|
+
body: {
|
|
1003
|
+
codigo: localStorage.getItem('codigo') ?? '',
|
|
1004
|
+
identificadorAnt: this.dpiCodeSecond
|
|
1005
|
+
}
|
|
1006
|
+
};
|
|
1007
|
+
// Llamar al servicio
|
|
1008
|
+
this.dpiService.comparison(payload).subscribe({
|
|
1009
|
+
next: async (response) => {
|
|
1010
|
+
console.log('✅ Respuesta de validación facial:', response);
|
|
1011
|
+
await this.hideLoading();
|
|
1012
|
+
if (!response.error) {
|
|
1013
|
+
// Validación exitosa
|
|
1014
|
+
this.validationService.updateValidationStep('validateFace', true);
|
|
1015
|
+
if (this.simpleProcess) {
|
|
1016
|
+
// Para simpleProcess, cerrar automáticamente
|
|
1017
|
+
await this.handleExitWithResult(true, 'facial-validation-success');
|
|
1018
|
+
}
|
|
1019
|
+
else {
|
|
1020
|
+
// Para proceso normal, mover al siguiente paso
|
|
1021
|
+
this.moveToNextStep(6);
|
|
1022
|
+
}
|
|
1023
|
+
}
|
|
1024
|
+
else {
|
|
1025
|
+
// Error en la validación
|
|
1026
|
+
this.validationService.updateValidationStep('validateFace', false);
|
|
1027
|
+
await this.showAlert('¡Lo sentimos!', 'La validación facial no fue exitosa. Por favor intenta nuevamente.', []);
|
|
1028
|
+
if (this.simpleProcess) {
|
|
1029
|
+
await this.handleExitWithResult(false, 'facial-validation-error');
|
|
1030
|
+
}
|
|
1031
|
+
}
|
|
1032
|
+
},
|
|
1033
|
+
error: async (error) => {
|
|
1034
|
+
console.error('❌ Error en validación facial:', error);
|
|
1035
|
+
await this.hideLoading();
|
|
1036
|
+
this.validationService.updateValidationStep('validateFace', false);
|
|
1037
|
+
await this.showAlert('¡Lo sentimos!', 'Ocurrió un error durante la validación facial.', []);
|
|
1038
|
+
if (this.simpleProcess) {
|
|
1039
|
+
await this.handleExitWithResult(false, 'facial-validation-exception');
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
});
|
|
1043
|
+
}
|
|
1044
|
+
catch (error) {
|
|
1045
|
+
console.error('❌ Error procesando validación facial:', error);
|
|
1046
|
+
await this.hideLoading();
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1046
1049
|
// Modal handling methods
|
|
1047
1050
|
setupModalSubscriptions() {
|
|
1048
1051
|
this.modalDpiServices.closeOverlay$.subscribe(() => {
|
|
@@ -1204,47 +1207,6 @@ export class IdVisionComponent {
|
|
|
1204
1207
|
});
|
|
1205
1208
|
await modal.present();
|
|
1206
1209
|
}
|
|
1207
|
-
async openDirectPhotoSelfie() {
|
|
1208
|
-
console.log('🎬 Abriendo DirectPhotoSelfie modal...');
|
|
1209
|
-
// Cerrar cualquier loading antes de abrir la modal
|
|
1210
|
-
await this.hideLoading();
|
|
1211
|
-
const closeRequestedCallback = async () => {
|
|
1212
|
-
console.log('═══════════════════════════════════════════════════════');
|
|
1213
|
-
console.log('🚪 Callback closeRequested invocado en id-vision');
|
|
1214
|
-
console.log('═══════════════════════════════════════════════════════');
|
|
1215
|
-
if (this.simpleProcess) {
|
|
1216
|
-
console.log('🚪 Usuario cerró direct-photo-selfie - cerrando modal y emitiendo resultado');
|
|
1217
|
-
// Cerrar el modal primero
|
|
1218
|
-
await modal.dismiss();
|
|
1219
|
-
console.log('✅ Modal cerrado desde padre');
|
|
1220
|
-
// Ejecutar handleExitWithResult que emite el resultado
|
|
1221
|
-
// La app padre recibirá onExit$ y hará showSDK = false
|
|
1222
|
-
await this.handleExitWithResult(false, 'direct-photo-selfie-close');
|
|
1223
|
-
}
|
|
1224
|
-
else {
|
|
1225
|
-
// Para proceso normal, cerrar modal y limpiar
|
|
1226
|
-
await modal.dismiss();
|
|
1227
|
-
this.closeModalOverlay();
|
|
1228
|
-
}
|
|
1229
|
-
};
|
|
1230
|
-
console.log('📦 Creando modal con props...');
|
|
1231
|
-
console.log('📦 closeRequested callback definido:', !!closeRequestedCallback);
|
|
1232
|
-
const modal = await this.modalController.create({
|
|
1233
|
-
component: DirectPhotoSelfieComponent,
|
|
1234
|
-
componentProps: {
|
|
1235
|
-
onTakePicture: async (file) => {
|
|
1236
|
-
await this.photoVideoSelfieFile(file);
|
|
1237
|
-
},
|
|
1238
|
-
closeRequested: closeRequestedCallback,
|
|
1239
|
-
},
|
|
1240
|
-
backdropDismiss: false,
|
|
1241
|
-
// Optimización: sin animación para simpleProcess
|
|
1242
|
-
animated: !this.simpleProcess
|
|
1243
|
-
});
|
|
1244
|
-
console.log('✅ Modal creado, presentando...');
|
|
1245
|
-
await modal.present();
|
|
1246
|
-
console.log('✅ Modal presentado correctamente');
|
|
1247
|
-
}
|
|
1248
1210
|
async openAcuerdoVideo() {
|
|
1249
1211
|
// Cerrar cualquier loading antes de abrir la modal
|
|
1250
1212
|
await this.hideLoading();
|
|
@@ -1294,25 +1256,12 @@ export class IdVisionComponent {
|
|
|
1294
1256
|
});
|
|
1295
1257
|
await modal.present();
|
|
1296
1258
|
}
|
|
1297
|
-
// Legacy validation methods (kept for compatibility)
|
|
1298
|
-
async validateDPIFront(filePath) {
|
|
1299
|
-
await this.DpiFrontProccess(filePath);
|
|
1300
|
-
return true;
|
|
1301
|
-
}
|
|
1302
|
-
async validateDPIBack(filePath) {
|
|
1303
|
-
this.modalController.dismiss();
|
|
1304
|
-
await this.DpiBackProccess(filePath);
|
|
1305
|
-
return true;
|
|
1306
|
-
}
|
|
1307
1259
|
async getBackModal(file) {
|
|
1308
1260
|
if (!file || file.size === 0) {
|
|
1309
1261
|
return;
|
|
1310
1262
|
}
|
|
1311
1263
|
await this.VideoSelfieProcccess(file);
|
|
1312
1264
|
}
|
|
1313
|
-
async convertImagePathToFile(imagePath, fileName) {
|
|
1314
|
-
return await this.processingService.convertImagePathToFile(imagePath, fileName);
|
|
1315
|
-
}
|
|
1316
1265
|
// Utility methods
|
|
1317
1266
|
async showAlert(header, message, details, onConfirm) {
|
|
1318
1267
|
const detailsMessage = Array.isArray(details)
|
|
@@ -1352,7 +1301,192 @@ export class IdVisionComponent {
|
|
|
1352
1301
|
});
|
|
1353
1302
|
await toast.present();
|
|
1354
1303
|
}
|
|
1355
|
-
|
|
1304
|
+
onSlideChange() {
|
|
1305
|
+
const currentIndex = this.swiperContainerRef?.nativeElement?.swiper?.activeIndex;
|
|
1306
|
+
console.log('📍 Slide actual:', currentIndex);
|
|
1307
|
+
if (currentIndex === 2) {
|
|
1308
|
+
this.flip = true;
|
|
1309
|
+
setTimeout(() => {
|
|
1310
|
+
this.waitFlip = false;
|
|
1311
|
+
}, 1500);
|
|
1312
|
+
}
|
|
1313
|
+
// Ejecutar automáticamente la acción del paso actual si es tipo 6 (validación facial)
|
|
1314
|
+
// El índice 0 es el slide inicial, los pasos empiezan desde índice 1
|
|
1315
|
+
if (currentIndex && currentIndex > 0 && this.validationConfig) {
|
|
1316
|
+
const stepIndex = currentIndex - 1; // Ajustar porque slide 0 es inicial
|
|
1317
|
+
// Verificar que el índice esté dentro del rango válido
|
|
1318
|
+
if (stepIndex >= 0 && stepIndex < this.validationConfig.length) {
|
|
1319
|
+
const currentStep = this.validationConfig[stepIndex];
|
|
1320
|
+
console.log(`📋 Step en índice ${stepIndex}:`, {
|
|
1321
|
+
type: currentStep?.type,
|
|
1322
|
+
id: currentStep?.id,
|
|
1323
|
+
order: currentStep?.order
|
|
1324
|
+
});
|
|
1325
|
+
// Ejecutar automáticamente si es tipo 6 (validación facial)
|
|
1326
|
+
if (currentStep && currentStep.type === 6) {
|
|
1327
|
+
console.log('🎯 Detectado tipo 6 - Ejecutando validación facial automáticamente');
|
|
1328
|
+
// Pequeño delay para que el slide se renderice completamente
|
|
1329
|
+
setTimeout(() => {
|
|
1330
|
+
if (currentStep.action) {
|
|
1331
|
+
currentStep.action();
|
|
1332
|
+
}
|
|
1333
|
+
else {
|
|
1334
|
+
console.error('❌ No se encontró action para el step tipo 6');
|
|
1335
|
+
}
|
|
1336
|
+
}, 500);
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
else {
|
|
1340
|
+
console.warn(`⚠️ Índice ${stepIndex} fuera de rango. validationConfig.length: ${this.validationConfig.length}`);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
animationProgress() {
|
|
1345
|
+
const interval = setInterval(() => {
|
|
1346
|
+
this.progress += 0.02;
|
|
1347
|
+
if (this.progress >= 1) {
|
|
1348
|
+
this.progress = 1;
|
|
1349
|
+
clearInterval(interval);
|
|
1350
|
+
}
|
|
1351
|
+
}, 100);
|
|
1352
|
+
}
|
|
1353
|
+
startAnimations() {
|
|
1354
|
+
this.animationType('assets/imagesIdvision/face_scanning.json');
|
|
1355
|
+
this.animationProgress();
|
|
1356
|
+
this.animationText();
|
|
1357
|
+
}
|
|
1358
|
+
animationText() {
|
|
1359
|
+
this.showText = false;
|
|
1360
|
+
setTimeout(() => {
|
|
1361
|
+
this.showText = true;
|
|
1362
|
+
if (this.index >= this.texts.length) {
|
|
1363
|
+
if (this.comparsionStatus === 'success') {
|
|
1364
|
+
this.currentText = this.successText;
|
|
1365
|
+
this.animationType('assets/imagesIdvision/success.json', false);
|
|
1366
|
+
}
|
|
1367
|
+
else {
|
|
1368
|
+
this.currentText = this.errorText;
|
|
1369
|
+
this.animationType('assets/imagesIdvision/error.json', false);
|
|
1370
|
+
}
|
|
1371
|
+
return;
|
|
1372
|
+
}
|
|
1373
|
+
this.currentText = this.texts[this.index];
|
|
1374
|
+
this.index++;
|
|
1375
|
+
setTimeout(() => this.animationText(), 2000);
|
|
1376
|
+
}, 300);
|
|
1377
|
+
}
|
|
1378
|
+
openFacialValidation() {
|
|
1379
|
+
this.startAnimations();
|
|
1380
|
+
const payload = {
|
|
1381
|
+
endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
|
|
1382
|
+
headers: {
|
|
1383
|
+
apiKey: this.apikey,
|
|
1384
|
+
connectionMg: this.connection
|
|
1385
|
+
},
|
|
1386
|
+
body: {
|
|
1387
|
+
codigo: localStorage.getItem('codigo') ?? '',
|
|
1388
|
+
identificadorAnt: this.dpiCodeSecond
|
|
1389
|
+
}
|
|
1390
|
+
};
|
|
1391
|
+
this.comparsion(payload);
|
|
1392
|
+
}
|
|
1393
|
+
animationType(path, loop = true) {
|
|
1394
|
+
lottie.destroy();
|
|
1395
|
+
const container = this.elementRef.nativeElement.querySelector('.lottie-container');
|
|
1396
|
+
console.log('container:', container);
|
|
1397
|
+
if (!container) {
|
|
1398
|
+
console.log('No se encontró el contenedor Lottie');
|
|
1399
|
+
return;
|
|
1400
|
+
}
|
|
1401
|
+
lottie.loadAnimation({
|
|
1402
|
+
container: container,
|
|
1403
|
+
renderer: 'svg',
|
|
1404
|
+
loop,
|
|
1405
|
+
autoplay: true,
|
|
1406
|
+
path
|
|
1407
|
+
});
|
|
1408
|
+
}
|
|
1409
|
+
comparsion(payload) {
|
|
1410
|
+
this.dpiService.comparison(payload).subscribe({
|
|
1411
|
+
next: async (response) => {
|
|
1412
|
+
console.log('Respuesta de validación facial:', response);
|
|
1413
|
+
if (!response.error) {
|
|
1414
|
+
this.actionSuccess();
|
|
1415
|
+
return;
|
|
1416
|
+
}
|
|
1417
|
+
this.actionError();
|
|
1418
|
+
},
|
|
1419
|
+
error: async (error) => {
|
|
1420
|
+
console.error('Error en validación facial:', error);
|
|
1421
|
+
this.actionError();
|
|
1422
|
+
}
|
|
1423
|
+
});
|
|
1424
|
+
}
|
|
1425
|
+
actionSuccess() {
|
|
1426
|
+
this.comparsionStatus = 'success';
|
|
1427
|
+
this.validationService.updateValidationStep('validateFace', true);
|
|
1428
|
+
}
|
|
1429
|
+
actionError() {
|
|
1430
|
+
this.comparsionStatus = 'error';
|
|
1431
|
+
this.validationService.updateValidationStep('validateFace', false);
|
|
1432
|
+
}
|
|
1433
|
+
finalizar() {
|
|
1434
|
+
this.navigationService.navigateToCompletion();
|
|
1435
|
+
}
|
|
1436
|
+
async openAcuerdoVideoNew() {
|
|
1437
|
+
// Cerrar cualquier loading antes de abrir la modal
|
|
1438
|
+
await this.hideLoading();
|
|
1439
|
+
const modal = await this.modalController.create({
|
|
1440
|
+
component: AcuerdoVideoPage,
|
|
1441
|
+
componentProps: {
|
|
1442
|
+
backFunction: async (file) => {
|
|
1443
|
+
await this.getAcuerdoVideo(file);
|
|
1444
|
+
},
|
|
1445
|
+
closeRequested: async () => {
|
|
1446
|
+
await modal.dismiss();
|
|
1447
|
+
await this.handleExitWithResult(false, 'acuerdo-video-close');
|
|
1448
|
+
},
|
|
1449
|
+
},
|
|
1450
|
+
backdropDismiss: false,
|
|
1451
|
+
animated: !this.simpleProcess
|
|
1452
|
+
});
|
|
1453
|
+
await modal.present();
|
|
1454
|
+
}
|
|
1455
|
+
async handleInitSecurityExit() {
|
|
1456
|
+
await this.handleExitWithResult(false, 'init-camera-security-block');
|
|
1457
|
+
}
|
|
1458
|
+
async evaluateInitialCameraSecurity() {
|
|
1459
|
+
const detection = await this.virtualCameraDetectionService.detectSuspiciousVideoInputs();
|
|
1460
|
+
if (!detection.blocked)
|
|
1461
|
+
return true;
|
|
1462
|
+
this.isInitCameraBlocked = true;
|
|
1463
|
+
this.initCameraBlockReason = detection.reason;
|
|
1464
|
+
this.cdRef.detectChanges();
|
|
1465
|
+
return false;
|
|
1466
|
+
}
|
|
1467
|
+
async logAvailableVideoInputsOnInit() {
|
|
1468
|
+
if (!navigator?.mediaDevices?.enumerateDevices) {
|
|
1469
|
+
console.warn('[mediaDevices] enumerateDevices no está disponible en este entorno.');
|
|
1470
|
+
return;
|
|
1471
|
+
}
|
|
1472
|
+
try {
|
|
1473
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
1474
|
+
const videoInputs = devices.filter((device) => device.kind === 'videoinput');
|
|
1475
|
+
if (!videoInputs.length) {
|
|
1476
|
+
console.warn('No se detectaron cámaras (videoinput).');
|
|
1477
|
+
return;
|
|
1478
|
+
}
|
|
1479
|
+
console.log(`Cámaras detectadas: ${videoInputs.length}`);
|
|
1480
|
+
videoInputs.forEach((camera, index) => {
|
|
1481
|
+
const safeLabel = camera.label?.trim() ? camera.label : '(sin label, falta permiso de cámara)';
|
|
1482
|
+
console.log(`[Camara] #${index + 1} label="${safeLabel}" deviceId="${camera.deviceId}" groupId="${camera.groupId || '-'}"`);
|
|
1483
|
+
});
|
|
1484
|
+
}
|
|
1485
|
+
catch (error) {
|
|
1486
|
+
console.error('[Camara] Error al enumerar cámaras:', error);
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
static { this.ɵfac = function IdVisionComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IdVisionComponent)(i0.ɵɵdirectiveInject(i1.ModalController), i0.ɵɵdirectiveInject(i1.AlertController), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i2.ModalDpiServices), i0.ɵɵdirectiveInject(i3.SdkCommunicationService), i0.ɵɵdirectiveInject(i1.NavController), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ToastController), i0.ɵɵdirectiveInject(i1.LoadingController), i0.ɵɵdirectiveInject(i4.ConfigurationService), i0.ɵɵdirectiveInject(i5.ValidationService), i0.ɵɵdirectiveInject(i6.NavigationService), i0.ɵɵdirectiveInject(i7.ProcessingService), i0.ɵɵdirectiveInject(i8.DpiService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i9.VirtualCameraDetectionService)); }; }
|
|
1356
1490
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IdVisionComponent, selectors: [["app-id-vision"]], viewQuery: function IdVisionComponent_Query(rf, ctx) { if (rf & 1) {
|
|
1357
1491
|
i0.ɵɵviewQuery(_c0, 5);
|
|
1358
1492
|
i0.ɵɵviewQuery(_c1, 5, ElementRef);
|
|
@@ -1360,25 +1494,28 @@ export class IdVisionComponent {
|
|
|
1360
1494
|
let _t;
|
|
1361
1495
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dpi = _t.first);
|
|
1362
1496
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.swiperContainerRef = _t.first);
|
|
1363
|
-
} }, inputs: { isSwipe: "isSwipe", dpiCode: "dpiCode", connection: "connection", apikey: "apikey", env: "env", validationConfig: "validationConfig" }, standalone: true, features: [i0.ɵɵProvidersFeature([DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService]), i0.ɵɵStandaloneFeature], decls:
|
|
1364
|
-
i0.ɵɵ
|
|
1365
|
-
i0.ɵɵ
|
|
1366
|
-
i0.ɵɵ
|
|
1367
|
-
i0.ɵɵ
|
|
1497
|
+
} }, inputs: { isSwipe: "isSwipe", dpiCode: "dpiCode", dpiCodeSecond: "dpiCodeSecond", connection: "connection", apikey: "apikey", env: "env", validationConfig: "validationConfig" }, standalone: true, features: [i0.ɵɵProvidersFeature([DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService]), i0.ɵɵStandaloneFeature], decls: 16, vars: 9, consts: [["swiperContainer", ""], ["dpi", ""], ["class", "content", 4, "ngIf"], [1, "content"], ["init", "false", "class", "custom-swiper", 3, "swiperslidechange", 4, "ngIf"], [1, "sdk-metag-version"], ["vertical", "top", "horizontal", "end", "slot", "fixed", 4, "ngIf"], [1, "sdk-metag-wrapper-no-internet"], [1, "sdk-metag-content-no-internet"], [1, "sdk-metag-title-no-internet"], ["src", "assets/imagesIdvision/no-internet.svg", "alt", "Sin conexi\u00F3n img", 1, "sdk-metag-icon-no-internet"], [1, "sdk-metag-description-no-internet"], [3, "exitPressed", "title", "description", "reason", "exitLabel"], ["init", "false", 1, "custom-swiper", 3, "swiperslidechange"], [4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "slide-third"], ["class", "head", 4, "ngIf"], [1, "sdk-metag-image-confirmation"], ["src", "assets/imagesIdvision/blue-check.png", "alt", "Check morado"], ["expand", "block", 1, "action-button", 3, "click"], [1, "slide-one"], [1, "head"], [1, "head-title"], [1, "head-subtitle"], [1, "head-dpi"], ["type", "number", "disabled", "true", "placeholder", "0000000000000"], [1, "instructions"], [1, "instruction"], ["size", "3"], ["src", "assets/imagesIdvision/documentsImage.png", "alt", "", 1, "instruction-img"], [1, "instruction-description"], ["src", "assets/imagesIdvision/rostroImage.png", "alt", "", 1, "instruction-img"], [1, "slide-two", 3, "ngSwitch"], [3, "ngClass", 4, "ngSwitchCase"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [3, "ngClass"], ["src", "assets/imagesIdvision/Foco.png", "alt", "", 1, "instruction-img"], [1, "card-wrapper"], [1, "card"], [1, "side", "front"], ["src", "assets/imagesIdvision/dpi_m_f.png", "alt", "Frontal"], [1, "side", "back"], ["src", "assets/imagesIdvision/dpi_t.png", "alt", "Reverso"], ["expand", "block", 1, "action-button", 3, "click", "disabled"], [1, "sdk-metag-head"], [1, "sdk-metag-h-title"], [1, "sdk-metag-p-justify"], [1, "sdk-metag-verify-container"], [1, "sdk-metag-image-container"], ["src", "assets/imagesIdvision/Foco.png", "alt", ""], [1, "sdk-metag-container-text"], ["src", "assets/imagesIdvision/rostroImage.png", "alt", ""], [1, "sdk-metag-fixed-footer"], ["expand", "block", 1, "sdk-metag-custom-button", 3, "click"], [1, "slide-six"], [1, "avatar-wrapper"], [1, "avatar-container"], [1, "avatar", 3, "src"], [1, "lottie-container"], [1, "status-container"], [1, "status-text"], [3, "value"], ["style", "margin: 100px auto 0 !important;", "class", "action-button button-success", "expand", "block", 3, "click", 4, "ngIf"], ["expand", "block", 1, "action-button", "button-success", 2, "margin", "100px auto 0 !important", 3, "click"], ["vertical", "top", "horizontal", "end", "slot", "fixed"], [1, "sdk-metag-button-debug", 3, "click"], ["name", "bug-outline"]], template: function IdVisionComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1498
|
+
i0.ɵɵtemplate(0, IdVisionComponent_ion_content_0_Template, 2, 4, "ion-content", 2);
|
|
1499
|
+
i0.ɵɵelementStart(1, "ion-content", 3);
|
|
1500
|
+
i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_2_Template, 12, 4, "swiper-container", 4);
|
|
1501
|
+
i0.ɵɵelementStart(3, "div", 5);
|
|
1502
|
+
i0.ɵɵtext(4);
|
|
1368
1503
|
i0.ɵɵelementEnd();
|
|
1369
|
-
i0.ɵɵtemplate(
|
|
1504
|
+
i0.ɵɵtemplate(5, IdVisionComponent_ion_fab_5_Template, 3, 0, "ion-fab", 6);
|
|
1370
1505
|
i0.ɵɵelementEnd();
|
|
1371
|
-
i0.ɵɵelementStart(
|
|
1372
|
-
i0.ɵɵtext(
|
|
1506
|
+
i0.ɵɵelementStart(6, "ion-content")(7, "div", 7)(8, "div", 8)(9, "h2", 9);
|
|
1507
|
+
i0.ɵɵtext(10, "Sin conexi\u00F3n");
|
|
1373
1508
|
i0.ɵɵelementEnd();
|
|
1374
|
-
i0.ɵɵelement(
|
|
1375
|
-
i0.ɵɵelementStart(
|
|
1376
|
-
i0.ɵɵtext(
|
|
1377
|
-
i0.ɵɵelement(
|
|
1378
|
-
i0.ɵɵtext(
|
|
1509
|
+
i0.ɵɵelement(11, "img", 10);
|
|
1510
|
+
i0.ɵɵelementStart(12, "p", 11);
|
|
1511
|
+
i0.ɵɵtext(13, " No pudimos cargar la p\u00E1gina. ");
|
|
1512
|
+
i0.ɵɵelement(14, "br");
|
|
1513
|
+
i0.ɵɵtext(15, " Verifica tu internet y prueba de nuevo. ");
|
|
1379
1514
|
i0.ɵɵelementEnd()()()();
|
|
1380
1515
|
} if (rf & 2) {
|
|
1381
|
-
i0.ɵɵ
|
|
1516
|
+
i0.ɵɵproperty("ngIf", ctx.isInitCameraBlocked);
|
|
1517
|
+
i0.ɵɵadvance();
|
|
1518
|
+
i0.ɵɵstyleProp("display", ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
|
|
1382
1519
|
i0.ɵɵadvance();
|
|
1383
1520
|
i0.ɵɵproperty("ngIf", !ctx.simpleProcess);
|
|
1384
1521
|
i0.ɵɵadvance(2);
|
|
@@ -1386,13 +1523,13 @@ export class IdVisionComponent {
|
|
|
1386
1523
|
i0.ɵɵadvance();
|
|
1387
1524
|
i0.ɵɵproperty("ngIf", ctx.showDebug);
|
|
1388
1525
|
i0.ɵɵadvance();
|
|
1389
|
-
i0.ɵɵstyleProp("display", !ctx.hasInternet ? "block" : "none");
|
|
1390
|
-
} }, dependencies: [IonicModule, i1.IonButton, i1.IonContent, i1.IonFab, i1.IonFabButton, i1.IonGrid, i1.IonIcon, i1.IonInput, i1.IonItem, i1.IonRow, i1.NumericValueAccessor, CommonModule, i9.NgClass, i9.NgForOf, i9.NgIf, i9.NgSwitch, i9.NgSwitchCase, i9.NgSwitchDefault, HttpClientModule], styles: ["// ============================================\r\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\r\n// ============================================\r\n// Usamos :host para encapsular todo dentro del componente\r\n// y evitar que los estilos globales del padre nos afecten\r\n\r\n:host {\r\n display: block;\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n \r\n // Reset de estilos globales del padre\r\n * {\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n.content {\r\n padding: 10px;\r\n align-items: center;\r\n justify-content: center;\r\n height: 90vh;\r\n background-color: #fff;\r\n font-size: 18px;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}\r\n\r\n// Cuando es simpleProcess, levanta el contenido un 10%\r\n.content-simple-process {\r\n margin-top: 10vh;\r\n height: 90vh;\r\n}\r\n\r\n.h-title {\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n color: #F38301;\r\n text-align: center;\r\n margin-top: 20px;\r\n}\r\n\r\n:host p {\r\n font-size: 1em;\r\n color: #666;\r\n text-align: center;\r\n margin: 0;\r\n}\r\n\r\n:host ion-grid {\r\n margin-top: 20px;\r\n}\r\n\r\n:host ion-row {\r\n margin: 15px 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n:host ion-col {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n}\r\n\r\n:host ion-icon {\r\n font-size: 3em;\r\n color: #ff8c00;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.container-text {\r\n text-align: justify !important;\r\n width: 180px;\r\n}\r\n\r\n:host p {\r\n text-align: start;\r\n}\r\n\r\n.p-center {\r\n text-align: center;\r\n}\r\n\r\n.p-justify {\r\n text-align: start;\r\n}\r\n\r\n.head {\r\n padding: 20px;\r\n margin-top: 20px;\r\n margin-bottom: 80px;\r\n}\r\n\r\n\r\n.verify-container {\r\n // padding: 60px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\r\n text-align: center;\r\n //background-color: black;\r\n}\r\n\r\n.fixed-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 0px 10px 25px 10px;\r\n // background-color: black; // Color de fondo, opcional\r\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\r\n\r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n margin: 0 auto;\r\n background-color: #ffcc00;\r\n color: #ffffff;\r\n font-weight: bold;\r\n border-radius: 20px;\r\n\r\n &:hover {\r\n background-color: #ffb300;\r\n }\r\n\r\n &:active {\r\n background-color: #e6a800;\r\n }\r\n }\r\n}\r\n\r\n.dpi-container {\r\n display: flex;\r\n //width: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n height: 45vh;\r\n}\r\n\r\n.dpi-image {\r\n width: 200px;\r\n}\r\n\r\n.image-container {\r\n width: 100px;\r\n max-width: 90px;\r\n}\r\n\r\n.col-confirmation {\r\n margin-top: 100px;\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n /* Ajusta el espacio entre los elementos */\r\n}\r\n\r\n.image-item {\r\n margin-top: 50px;\r\n padding-top: 70px;\r\n}\r\n\r\n.font-confirmation {\r\n font-size: 26px;\r\n text-align: center;\r\n // color: #005da9;\r\n color: #82298F;\r\n font-weight: bold;\r\n}\r\n\r\n\r\n.rounded-input {\r\n margin-top: 15px;\r\n background-color: #f4f6fc;\r\n /* Color de fondo suave */\r\n border-radius: 10px;\r\n /* Bordes redondeados */\r\n padding: 5px 5px;\r\n /* Espaciado interno */\r\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\r\n /* Sombra suave */\r\n --ion-border-color: transparent;\r\n /* Quita cualquier borde por defecto */\r\n}\r\n\r\n:host ion-input {\r\n text-align: center;\r\n color: #F38301;\r\n --padding-start: 8px;\r\n}\r\n\r\n:host .custom-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n justify-content: space-between;\r\n background-color: #ffffff;\r\n}\r\n\r\n:host .custom-footer ion-button {\r\n flex: 0 0 48%;\r\n}\r\n\r\n:host .custom-footer .left-button {\r\n max-width: 140px;\r\n color: black;\r\n --background: white;\r\n --color: #82298F;\r\n --border-radius: 20px;\r\n --border-color: white;\r\n margin-right: auto;\r\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\r\n}\r\n\r\n:host .custom-footer .right-button {\r\n margin-left: auto;\r\n}\r\n\r\n.tutorial-head {\r\n padding-top: 50px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: black;\r\n}\r\n\r\n.center-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 60vh;\r\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\r\n width: 100%;\r\n}\r\n\r\n.tutorial-title {\r\n text-align: center;\r\n}\r\n\r\n.rounded-input ion-input {\r\n font-size: 14px;\r\n /* Tama\u00F1o de texto */\r\n color: #333;\r\n /* Color del texto */\r\n}\r\n\r\n.rounded-input::part(native) {\r\n background: transparent;\r\n /* Fondo transparente para evitar conflictos */\r\n}\r\n\r\n.p-info {\r\n font-weight: bold;\r\n color: #714e93\r\n}\r\n\r\n.custom-button {\r\n --background: var(--purple-primary, #82298F) !important;\r\n --background-hover: var(--purple-secondary, #2b0d30) !important;\r\n --background-activated: var(--purple-secondary, #2b0d30) !important;\r\n --color: #ffffff !important;\r\n --border-radius: 20px !important;\r\n --padding-top: 10px !important;\r\n --padding-bottom: 10px !important;\r\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\r\n text-transform: none;\r\n pointer-events: auto;\r\n\r\n}\r\n\r\n//blur effect\r\n\r\n.blur-effect {\r\n filter: blur(5px);\r\n pointer-events: none;\r\n}\r\n\r\n.blur-overlay {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(255, 255, 255, 0.7);\r\n z-index: 999;\r\n filter: blur(5px);\r\n}\r\n\r\n.boton-personalizado {\r\n background-color: #4caf50;\r\n /* Verde, por ejemplo */\r\n color: white;\r\n font-size: 16px;\r\n}\r\n\r\n.version {\r\n position: fixed;\r\n bottom: 10px;\r\n right: 10px;\r\n font-size: 12px;\r\n color: #888;\r\n z-index: 1000;\r\n}\r\n\r\n.button-debug {\r\n --background: #ff4081;\r\n --color: #fff;\r\n}\r\n\r\n\r\n.wrapper-no-internet {\r\n background-color: #fff;\r\n height: 100vh;\r\n display: flex;\r\n justify-content: center; /* centra en eje vertical */\r\n align-items: center; /* centra en eje horizontal */\r\n padding: 40px;\r\n background-image: url('assets/imagesIdvision/background.png') !important;\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n \r\n}\r\n\r\n.content-no-internet {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n gap: 16px;\r\n}\r\n\r\n.title-no-internet{\r\n color: #000;\r\n font-size: 32px;\r\n font-weight: bold;\r\n}\r\n\r\n.icon-no-internet {\r\n width: 125px;\r\n display: block;\r\n margin-top: 25px;\r\n}\r\n\r\n.description-no-internet {\r\n margin-top: 25px;\r\n font-size: 22px;\r\n color: #000;\r\n line-height: 1.5;\r\n text-align: center;\r\n}\r\n.no-border{\r\n --border-width: 0 !important;\r\n}\r\n\r\n.confirmation-screen {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 80vh; // Se integra al 80% de la vista\r\n padding: 25px;\r\n box-sizing: border-box;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-color: white;\r\n gap: 20px; // Espacio entre elementos\r\n}\r\n\r\n.image-confirmation {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n\r\n.image-confirmation img {\r\n max-width: 300px; // Reducido de 500px a 300px\r\n width: 50%; // Reducido de 80% a 50%\r\n height: auto;\r\n}\r\n\r\n.button-container {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n padding: 0 10px;\r\n \r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n }\r\n}\r\n\r\n\r\n.close-button {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px; \r\n z-index: 1000;\r\n font-size: 15px;\r\n --color: #888; \r\n}\r\n\r\n.p-margin {\r\n margin-top: 50px !important;\r\n}\r\n\r\n"], encapsulation: 2 }); }
|
|
1526
|
+
i0.ɵɵstyleProp("display", !ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
|
|
1527
|
+
} }, dependencies: [IonicModule, i1.IonButton, i1.IonCol, i1.IonContent, i1.IonFab, i1.IonFabButton, i1.IonGrid, i1.IonIcon, i1.IonInput, i1.IonItem, i1.IonProgressBar, i1.IonRow, i1.NumericValueAccessor, CommonModule, i10.NgClass, i10.NgForOf, i10.NgIf, i10.NgSwitch, i10.NgSwitchCase, i10.NgSwitchDefault, HttpClientModule, CameraSecurityBlockComponent], styles: ["// ============================================\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\n// ============================================\n// Usamos [_nghost-%COMP%] para[_ngcontent-%COMP%] encapsular[_ngcontent-%COMP%] todo[_ngcontent-%COMP%] dentro[_ngcontent-%COMP%] del[_ngcontent-%COMP%] componente\n//[_ngcontent-%COMP%] y[_ngcontent-%COMP%] evitar[_ngcontent-%COMP%] que[_ngcontent-%COMP%] los[_ngcontent-%COMP%] estilos[_ngcontent-%COMP%] globales[_ngcontent-%COMP%] del[_ngcontent-%COMP%] padre[_ngcontent-%COMP%] nos[_ngcontent-%COMP%] afecten\n\n[_ngcontent-%COMP%] {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n // Reset de estilos globales del padre\n * {\n box-sizing: border-box;\n }\n}\n\n.sdk-metag-content[_ngcontent-%COMP%] {\n padding: 10px;\n align-items: center;\n justify-content: center;\n height: 90vh;\n background-color: #fff;\n font-size: 18px;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n//[_ngcontent-%COMP%] Cuando[_ngcontent-%COMP%] es[_ngcontent-%COMP%] simpleProcess[_ngcontent-%COMP%], levanta[_ngcontent-%COMP%] el[_ngcontent-%COMP%] contenido[_ngcontent-%COMP%] un[_ngcontent-%COMP%] 10%\n.sdk-metag-content-simple-process[_ngcontent-%COMP%] {\n margin-top: 10vh;\n height: 90vh;\n}\n\n.sdk-metag-h-title[_ngcontent-%COMP%] {\n font-size: 1.5em;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n margin-top: 20px;\n}\n\n[_nghost-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 1em;\n color: #666;\n text-align: center;\n margin: 0;\n}\n\n[_nghost-%COMP%] ion-grid[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n[_nghost-%COMP%] ion-row[_ngcontent-%COMP%] {\n margin: 15px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n[_nghost-%COMP%] ion-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n[_nghost-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n color: #ff8c00;\n margin-bottom: 10px;\n}\n\n.sdk-metag-container-text[_ngcontent-%COMP%] {\n text-align: justify !important;\n width: 180px;\n}\n\n[_nghost-%COMP%] p[_ngcontent-%COMP%] {\n text-align: start;\n}\n\n.sdk-metag-p-center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.sdk-metag-p-justify[_ngcontent-%COMP%] {\n text-align: start;\n}\n\n.sdk-metag-head[_ngcontent-%COMP%] {\n padding: 20px;\n margin-top: 20px;\n margin-bottom: 80px;\n}\n\n\n.sdk-metag-verify-container[_ngcontent-%COMP%] {\n // padding: 60px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\n text-align: center;\n //background-color: black;\n}\n\n.sdk-metag-fixed-footer[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 0px 10px 25px 10px;\n // background-color: black; // Color de fondo, opcional\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\n\n ion-button {\n width: 90%;\n max-width: 300px;\n margin: 0 auto;\n background-color: #ffcc00;\n color: #ffffff;\n font-weight: bold;\n border-radius: 20px;\n\n &:hover {\n background-color: #ffb300;\n }\n\n &:active {\n background-color: #e6a800;\n }\n }\n}\n\n.sdk-metag-dpi-container[_ngcontent-%COMP%] {\n display: flex;\n //width: 100%;\n justify-content: center;\n align-items: center;\n height: 45vh;\n img {\n width: 90%;\n transform: rotate(270deg);\n }\n}\n\n.sdk-metag-dpi-image[_ngcontent-%COMP%] {\n width: 200px;\n}\n\n.sdk-metag-image-container[_ngcontent-%COMP%] {\n width: 100px;\n max-width: 90px;\n}\n\n.sdk-metag-col-confirmation[_ngcontent-%COMP%] {\n margin-top: 100px;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n \n\n}\n\n.sdk-metag-image-item[_ngcontent-%COMP%] {\n margin-top: 50px;\n padding-top: 70px;\n}\n\n.sdk-metag-font-confirmation[_ngcontent-%COMP%] {\n font-size: 26px;\n text-align: center;\n // color: #005da9;\n color: #82298F;\n font-weight: bold;\n}\n\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%] {\n margin-top: 15px;\n background-color: #f4f6fc;\n \n\n border-radius: 10px;\n \n\n padding: 5px 5px;\n \n\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n \n\n --ion-border-color: transparent;\n \n\n}\n\n[_nghost-%COMP%] ion-input[_ngcontent-%COMP%] {\n text-align: center;\n color: #F38301;\n --padding-start: 8px;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-between;\n background-color: #ffffff;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n flex: 0 0 48%;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] .sdk-metag-left-button[_ngcontent-%COMP%] {\n max-width: 140px;\n color: black;\n --background: white;\n --color: #82298F;\n --border-radius: 20px;\n --border-color: white;\n margin-right: auto;\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] .sdk-metag-right-button[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.sdk-metag-tutorial-head[_ngcontent-%COMP%] {\n padding-top: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: black;\n}\n\n.sdk-metag-center-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 60vh;\n \n\n width: 100%;\n}\n\n.sdk-metag-tutorial-title[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%] {\n font-size: 14px;\n \n\n color: #333;\n \n\n}\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%]::part(native) {\n background: transparent;\n \n\n}\n\n.sdk-metag-p-info[_ngcontent-%COMP%] {\n font-weight: bold;\n color: #714e93\n}\n\n.sdk-metag-custom-button[_ngcontent-%COMP%] {\n --background: var(--purple-primary, #82298F) !important;\n --background-hover: var(--purple-secondary, #2b0d30) !important;\n --background-activated: var(--purple-secondary, #2b0d30) !important;\n --color: #ffffff !important;\n --border-radius: 20px !important;\n --padding-top: 10px !important;\n --padding-bottom: 10px !important;\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\n text-transform: none;\n pointer-events: auto;\n\n}\n\n//blur[_ngcontent-%COMP%] effect\n\n.sdk-metag-blur-effect[_ngcontent-%COMP%] {\n filter: blur(5px);\n pointer-events: none;\n}\n\n.sdk-metag-blur-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 999;\n filter: blur(5px);\n}\n\n.sdk-metag-boton-personalizado[_ngcontent-%COMP%] {\n background-color: #4caf50;\n \n\n color: white;\n font-size: 16px;\n}\n\n.sdk-metag-version[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 10px;\n right: 10px;\n font-size: 12px;\n z-index: 1000;\n background: #f4f6fc !important;\n padding: 10px 15px !important;\n border-radius: 20px !important;\n}\n\n.sdk-metag-button-debug[_ngcontent-%COMP%] {\n --background: #ff4081;\n --color: #fff;\n}\n\n\n.sdk-metag-wrapper-no-internet[_ngcontent-%COMP%] {\n background-color: #fff;\n height: 100vh;\n display: flex;\n justify-content: center; \n\n align-items: center; \n\n padding: 40px;\n background-image: url('assets/imagesIdvision/background.png') !important;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n}\n\n.sdk-metag-content-no-internet[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 16px;\n}\n\n.sdk-metag-title-no-internet[_ngcontent-%COMP%] {\n color: #000;\n font-size: 32px;\n font-weight: bold;\n}\n\n.sdk-metag-icon-no-internet[_ngcontent-%COMP%] {\n width: 125px;\n display: block;\n margin-top: 25px;\n}\n\n.sdk-metag-description-no-internet[_ngcontent-%COMP%] {\n margin-top: 25px;\n font-size: 22px;\n color: #000;\n line-height: 1.5;\n text-align: center;\n}\n\n.sdk-metag-no-border[_ngcontent-%COMP%] {\n --border-width: 0 !important;\n}\n\n.sdk-metag-confirmation-screen[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 80vh; // Se integra al 80% de la vista\n padding: 25px;\n box-sizing: border-box;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n background-color: white;\n gap: 20px; // Espacio entre elementos\n}\n\n.sdk-metag-image-confirmation[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n}\n\n.sdk-metag-image-confirmation[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n max-width: 300px; // Reducido de 500px a 300px\n width: 40%; // Reducido de 80% a 50%\n height: auto;\n}\n\n.sdk-metag-button-container[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n justify-content: center;\n padding: 0 10px;\n\n ion-button {\n width: 90%;\n max-width: 300px;\n }\n}\n\n\n.sdk-metag-close-button[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 1000;\n font-size: 15px;\n --color: #888;\n}\n\n.sdk-metag-p-margin[_ngcontent-%COMP%] {\n margin-top: 50px !important;\n}\n\n.content[_ngcontent-%COMP%] {\n background-color: #ffffff;\n --background: #ffffff;\n}\n\n\n\n.head[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.head-title[_ngcontent-%COMP%] {\n font-size: 23px;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n}\n\n.description[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 25px;\n font-size: 14px;\n margin-bottom: 25px;\n}\n\n.head-subtitle[_ngcontent-%COMP%] {\n text-align: justify;\n margin-top: 25px;\n font-size: 14px;\n}\n\n.head-dpi[_ngcontent-%COMP%] {\n margin-top: 25px;\n //background-color: #f4f6fc;\n border-radius: 10px;\n --ion-border-color: transparent;\n //padding: 5px 5px;\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n --background: #f4f6fc !important;\n\n ion-input {\n text-align: center;\n color: #F38301;\n font-weight: 500;\n font-size: 19px;\n }\n}\n\n.instructions[_ngcontent-%COMP%] {\n}\n\n.instruction[_ngcontent-%COMP%] {\n margin: 0 !important;\n}\n\n.instruction-img[_ngcontent-%COMP%] {\n width: 100px;\n max-width: 100px;\n}\n\n.instruction-description[_ngcontent-%COMP%] {\n font-size: 13px;\n text-align: justify;\n padding-right: 15px;\n}\n\n.action-button[_ngcontent-%COMP%] {\n width: 300px;\n max-width: 300px;\n margin: 25px auto;\n --background: #82298F;\n --color: #ffffff;\n font-weight: bold;\n --border-radius: 20px;\n --box-shadow: none;\n}\n\n.exit-button[_ngcontent-%COMP%] {\n --background: transparent !important;\n --color: #F38301 !important;\n}\n\n.action-button[_ngcontent-%COMP%]:hover {\n --background: #82298F;\n}\n\n.action-button[_ngcontent-%COMP%]:active {\n --background: #82298F;\n}\n\n\n\n.card-wrapper[_ngcontent-%COMP%] {\n perspective: 1000px;\n //margin: 40px;\n margin: 25px;\n}\n\n\n\n.card[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n height: 350px;\n transform-style: preserve-3d;\n transition: transform 1s ease-in-out;\n cursor: pointer;\n}\n\n\n\n.card.flip[_ngcontent-%COMP%] {\n transform: rotateY(180deg);\n}\n\n\n\n.side[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n\n img {\n transform: rotate(270deg);\n width: 100%;\n object-fit: contain;\n }\n}\n\n.front[_ngcontent-%COMP%] {\n z-index: 2;\n}\n\n.back[_ngcontent-%COMP%] {\n transform: rotateY(180deg);\n}\n\n.avatar-wrapper[_ngcontent-%COMP%]{\n width:100%;\n display:flex;\n justify-content:center;\n margin-bottom:20px;\n}\n\n.avatar-container[_ngcontent-%COMP%]{\n position:relative;\n width:300px;\n height:300px;\n margin-bottom: 25px;\n}\n\n.avatar[_ngcontent-%COMP%]{\n width:100%;\n height:100%;\n border-radius:50%;\n object-fit:cover;\n padding: 35px;\n}\n\n.lottie-container[_ngcontent-%COMP%]{\n position:absolute;\n inset:0;\n}\n\nion-progress-bar[_ngcontent-%COMP%]{\n height:7px;\n border-radius:10px;\n --progress-background: #F38301;\n}\n\n.slide-six[_ngcontent-%COMP%] {\n}\n\n\n.status-container[_ngcontent-%COMP%] {\n text-align: center !important;\n margin-top: 20px;\n min-height: 30px;\n}\n\n.status-text[_ngcontent-%COMP%] {\n text-align: center !important;\n color: #444;\n font-size: 14px !important;\n opacity: 0;\n transform: translateY(10px);\n transition: all .4s ease;\n}\n\n.status-text.show[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateY(0);\n}\n\n.button-success[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_checkPop 0.4s ease;\n}\n\n@keyframes _ngcontent-%COMP%_checkPop{\n\n 0%{\n transform: scale(0);\n opacity:0;\n }\n\n 60%{\n transform: scale(1.2);\n }\n\n 100%{\n transform: scale(1);\n opacity:1;\n }\n\n}"] }); }
|
|
1391
1528
|
}
|
|
1392
1529
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IdVisionComponent, [{
|
|
1393
1530
|
type: Component,
|
|
1394
|
-
args: [{ selector: 'app-id-vision', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [IonicModule, CommonModule, HttpClientModule], providers: [DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService], encapsulation: ViewEncapsulation.None, template: "\r\n\r\n<ion-content [style.display]=\"hasInternet ? 'block' : 'none'\">\r\n \r\n <swiper-container *ngIf=\"!simpleProcess\" init=\"false\" class=\"custom-swiper\" #swiperContainer>\r\n\r\n <!-- \uD83D\uDD39 PASO 1: Verificaci\u00F3n de Identidad (Est\u00E1tico) -->\r\n <swiper-slide *ngIf=\"!simpleProcess\">\r\n <div class=\"content\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Verifiquemos tu identidad</h2>\r\n <p class=\"p-justify p-margin\">Para completar tu verificaci\u00F3n, por favor ingresa tu n\u00FAmero de identificaci\u00F3n (DPI).</p>\r\n <ion-item class=\"rounded-input\">\r\n <ion-input #dpi type=\"number\" disabled=\"true\" placeholder=\"Digita tu n\u00FAmero de DPI\"></ion-input>\r\n </ion-item>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/documentsImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Sube fotos de documentos que prueben tu identidad</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Graba un video selfie, mant\u00E9n tu rostro centrado en la pantalla y evita moverte.</p>\r\n </div>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"handleClick()\">Empecemos</ion-button>\r\n </div>\r\n </div>\r\n </swiper-slide>\r\n\r\n <!-- \uD83D\uDD39 PASOS INTERMEDIOS: Se generan din\u00E1micamente seg\u00FAn el `order` -->\r\n <swiper-slide *ngFor=\"let step of validationConfig\">\r\n <div class=\"content\" [ngClass]=\"{'content-simple-process': simpleProcess}\" [ngSwitch]=\"step.type\">\r\n <!--Acuerdo de video-->\r\n <div *ngSwitchCase=\"1\" [ngClass]=\"{'blur-effect': simpleProcess}\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Acuerdo de v\u00EDdeo</h2>\r\n <p class=\"p-justify\">Graba un breve video para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <!-- \uD83D\uDD39 DPI Frontal -->\r\n <div *ngSwitchCase=\"2\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Coloca la parte frontal de tu DPI</h2>\r\n <p class=\"p-center p-info p-margin\">Evita sombras, reflejos y coloca tu documento dentro del recuadro.</p>\r\n </div>\r\n <div class=\"dpi-container\">\r\n <img src=\"assets/imagesIdvision/dpi-front-1.png\" alt=\"\" />\r\n </div>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Tomar una foto</ion-button>\r\n </div>\r\n </div>\r\n\r\n <!-- \uD83D\uDD39 DPI Trasero -->\r\n <div *ngSwitchCase=\"3\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Coloca el reverso de tu DPI</h2>\r\n <p class=\"p-center p-info p-margin\">Evita sombras, reflejos y coloca tu documento dentro del recuadro.</p>\r\n </div>\r\n <div class=\"dpi-container\">\r\n <img src=\"assets/imagesIdvision/dpi-back-1.png\" alt=\"\" />\r\n </div>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Tomar una foto</ion-button>\r\n </div>\r\n </div>\r\n\r\n <!-- \uD83D\uDD39 Video Selfie -->\r\n <div *ngSwitchCase=\"4\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Video Selfie</h2>\r\n <p class=\"p-justify p-margin\">Graba un breve video para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <!-- Photo Selfie -->\r\n <!-- TODO Se debera cambiar a 5, se dejo 1 por acuerdo de video -->\r\n <div *ngSwitchCase=\"5\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Foto Selfie</h2>\r\n <p class=\"p-justify\">Toma una foto para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>\r\n <h2>Paso desconocido</h2>\r\n </div>\r\n </div>\r\n </swiper-slide>\r\n <swiper-slide>\r\n <div class=\"confirmation-screen\">\r\n <div class=\"font-confirmation\" *ngIf=\"isValid\">\r\n <p class=\"font-confirmation\">Informaci\u00F3n procesada de manera correcta</p>\r\n </div>\r\n <div class=\"font-confirmation\" *ngIf=\"!isValid\">\r\n <p class=\"font-confirmation\">Ocurri\u00F3 un error al procesar la informaci\u00F3n</p>\r\n </div>\r\n <div class=\"image-confirmation\">\r\n <img src=\"assets/imagesIdvision/blue-check.png\" alt=\"Check morado\" />\r\n </div>\r\n <div class=\"button-container\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"handleExit()\">Continuar</ion-button>\r\n </div>\r\n </div>\r\n\r\n\r\n </swiper-slide>\r\n\r\n </swiper-container>\r\n <div class=\"version\">{{versionSDK}} {{configEnv.show_label ? configEnv.env_name: ''}}</div>\r\n <ion-fab vertical=\"top\" horizontal=\"end\" slot=\"fixed\" *ngIf=\"showDebug\">\r\n <ion-fab-button class=\"button-debug\" (click)=\"copyProccess()\">\r\n <ion-icon name=\"bug-outline\"></ion-icon>\r\n </ion-fab-button>\r\n </ion-fab>\r\n\r\n</ion-content>\r\n<!-- pantalla para cuando no exista internet -->\r\n<ion-content [style.display]=\"!hasInternet ? 'block' : 'none'\">\r\n <div class=\"wrapper-no-internet\">\r\n <div class=\"content-no-internet\">\r\n <h2 class=\"title-no-internet\">Error de conexi\u00F3n</h2>\r\n <img src=\"assets/imagesIdvision/no-internet.svg\" alt=\"Error conexi\u00F3n img\" class=\"icon-no-internet\" />\r\n <p class=\"description-no-internet\">\r\n No pudimos cargar la p\u00E1gina. <br>\r\n Verifica tu internet y prueba de nuevo.\r\n </p>\r\n </div>\r\n </div>\r\n</ion-content>", styles: ["// ============================================\r\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\r\n// ============================================\r\n// Usamos :host para encapsular todo dentro del componente\r\n// y evitar que los estilos globales del padre nos afecten\r\n\r\n:host {\r\n display: block;\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n \r\n // Reset de estilos globales del padre\r\n * {\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n.content {\r\n padding: 10px;\r\n align-items: center;\r\n justify-content: center;\r\n height: 90vh;\r\n background-color: #fff;\r\n font-size: 18px;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}\r\n\r\n// Cuando es simpleProcess, levanta el contenido un 10%\r\n.content-simple-process {\r\n margin-top: 10vh;\r\n height: 90vh;\r\n}\r\n\r\n.h-title {\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n color: #F38301;\r\n text-align: center;\r\n margin-top: 20px;\r\n}\r\n\r\n:host p {\r\n font-size: 1em;\r\n color: #666;\r\n text-align: center;\r\n margin: 0;\r\n}\r\n\r\n:host ion-grid {\r\n margin-top: 20px;\r\n}\r\n\r\n:host ion-row {\r\n margin: 15px 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n:host ion-col {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n}\r\n\r\n:host ion-icon {\r\n font-size: 3em;\r\n color: #ff8c00;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.container-text {\r\n text-align: justify !important;\r\n width: 180px;\r\n}\r\n\r\n:host p {\r\n text-align: start;\r\n}\r\n\r\n.p-center {\r\n text-align: center;\r\n}\r\n\r\n.p-justify {\r\n text-align: start;\r\n}\r\n\r\n.head {\r\n padding: 20px;\r\n margin-top: 20px;\r\n margin-bottom: 80px;\r\n}\r\n\r\n\r\n.verify-container {\r\n // padding: 60px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\r\n text-align: center;\r\n //background-color: black;\r\n}\r\n\r\n.fixed-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 0px 10px 25px 10px;\r\n // background-color: black; // Color de fondo, opcional\r\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\r\n\r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n margin: 0 auto;\r\n background-color: #ffcc00;\r\n color: #ffffff;\r\n font-weight: bold;\r\n border-radius: 20px;\r\n\r\n &:hover {\r\n background-color: #ffb300;\r\n }\r\n\r\n &:active {\r\n background-color: #e6a800;\r\n }\r\n }\r\n}\r\n\r\n.dpi-container {\r\n display: flex;\r\n //width: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n height: 45vh;\r\n}\r\n\r\n.dpi-image {\r\n width: 200px;\r\n}\r\n\r\n.image-container {\r\n width: 100px;\r\n max-width: 90px;\r\n}\r\n\r\n.col-confirmation {\r\n margin-top: 100px;\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n /* Ajusta el espacio entre los elementos */\r\n}\r\n\r\n.image-item {\r\n margin-top: 50px;\r\n padding-top: 70px;\r\n}\r\n\r\n.font-confirmation {\r\n font-size: 26px;\r\n text-align: center;\r\n // color: #005da9;\r\n color: #82298F;\r\n font-weight: bold;\r\n}\r\n\r\n\r\n.rounded-input {\r\n margin-top: 15px;\r\n background-color: #f4f6fc;\r\n /* Color de fondo suave */\r\n border-radius: 10px;\r\n /* Bordes redondeados */\r\n padding: 5px 5px;\r\n /* Espaciado interno */\r\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\r\n /* Sombra suave */\r\n --ion-border-color: transparent;\r\n /* Quita cualquier borde por defecto */\r\n}\r\n\r\n:host ion-input {\r\n text-align: center;\r\n color: #F38301;\r\n --padding-start: 8px;\r\n}\r\n\r\n:host .custom-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n justify-content: space-between;\r\n background-color: #ffffff;\r\n}\r\n\r\n:host .custom-footer ion-button {\r\n flex: 0 0 48%;\r\n}\r\n\r\n:host .custom-footer .left-button {\r\n max-width: 140px;\r\n color: black;\r\n --background: white;\r\n --color: #82298F;\r\n --border-radius: 20px;\r\n --border-color: white;\r\n margin-right: auto;\r\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\r\n}\r\n\r\n:host .custom-footer .right-button {\r\n margin-left: auto;\r\n}\r\n\r\n.tutorial-head {\r\n padding-top: 50px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: black;\r\n}\r\n\r\n.center-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 60vh;\r\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\r\n width: 100%;\r\n}\r\n\r\n.tutorial-title {\r\n text-align: center;\r\n}\r\n\r\n.rounded-input ion-input {\r\n font-size: 14px;\r\n /* Tama\u00F1o de texto */\r\n color: #333;\r\n /* Color del texto */\r\n}\r\n\r\n.rounded-input::part(native) {\r\n background: transparent;\r\n /* Fondo transparente para evitar conflictos */\r\n}\r\n\r\n.p-info {\r\n font-weight: bold;\r\n color: #714e93\r\n}\r\n\r\n.custom-button {\r\n --background: var(--purple-primary, #82298F) !important;\r\n --background-hover: var(--purple-secondary, #2b0d30) !important;\r\n --background-activated: var(--purple-secondary, #2b0d30) !important;\r\n --color: #ffffff !important;\r\n --border-radius: 20px !important;\r\n --padding-top: 10px !important;\r\n --padding-bottom: 10px !important;\r\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\r\n text-transform: none;\r\n pointer-events: auto;\r\n\r\n}\r\n\r\n//blur effect\r\n\r\n.blur-effect {\r\n filter: blur(5px);\r\n pointer-events: none;\r\n}\r\n\r\n.blur-overlay {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(255, 255, 255, 0.7);\r\n z-index: 999;\r\n filter: blur(5px);\r\n}\r\n\r\n.boton-personalizado {\r\n background-color: #4caf50;\r\n /* Verde, por ejemplo */\r\n color: white;\r\n font-size: 16px;\r\n}\r\n\r\n.version {\r\n position: fixed;\r\n bottom: 10px;\r\n right: 10px;\r\n font-size: 12px;\r\n color: #888;\r\n z-index: 1000;\r\n}\r\n\r\n.button-debug {\r\n --background: #ff4081;\r\n --color: #fff;\r\n}\r\n\r\n\r\n.wrapper-no-internet {\r\n background-color: #fff;\r\n height: 100vh;\r\n display: flex;\r\n justify-content: center; /* centra en eje vertical */\r\n align-items: center; /* centra en eje horizontal */\r\n padding: 40px;\r\n background-image: url('assets/imagesIdvision/background.png') !important;\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n \r\n}\r\n\r\n.content-no-internet {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n gap: 16px;\r\n}\r\n\r\n.title-no-internet{\r\n color: #000;\r\n font-size: 32px;\r\n font-weight: bold;\r\n}\r\n\r\n.icon-no-internet {\r\n width: 125px;\r\n display: block;\r\n margin-top: 25px;\r\n}\r\n\r\n.description-no-internet {\r\n margin-top: 25px;\r\n font-size: 22px;\r\n color: #000;\r\n line-height: 1.5;\r\n text-align: center;\r\n}\r\n.no-border{\r\n --border-width: 0 !important;\r\n}\r\n\r\n.confirmation-screen {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 80vh; // Se integra al 80% de la vista\r\n padding: 25px;\r\n box-sizing: border-box;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-color: white;\r\n gap: 20px; // Espacio entre elementos\r\n}\r\n\r\n.image-confirmation {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n\r\n.image-confirmation img {\r\n max-width: 300px; // Reducido de 500px a 300px\r\n width: 50%; // Reducido de 80% a 50%\r\n height: auto;\r\n}\r\n\r\n.button-container {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n padding: 0 10px;\r\n \r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n }\r\n}\r\n\r\n\r\n.close-button {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px; \r\n z-index: 1000;\r\n font-size: 15px;\r\n --color: #888; \r\n}\r\n\r\n.p-margin {\r\n margin-top: 50px !important;\r\n}\r\n\r\n"] }]
|
|
1395
|
-
}], () => [{ type: i1.ModalController }, { type: i1.AlertController }, { type: i1.Platform }, { type: i2.ModalDpiServices }, { type: i3.SdkCommunicationService }, { type: i1.NavController }, { type: i0.ChangeDetectorRef }, { type: i1.ToastController }, { type: i1.LoadingController }, { type: i4.ConfigurationService }, { type: i5.ValidationService }, { type: i6.NavigationService }, { type: i7.ProcessingService }, { type: i8.DpiService }], { dpi: [{
|
|
1531
|
+
args: [{ selector: 'app-id-vision', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [IonicModule, CommonModule, HttpClientModule, CameraSecurityBlockComponent], providers: [DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService], encapsulation: ViewEncapsulation.Emulated, template: "<ion-content *ngIf=\"isInitCameraBlocked\" class=\"content\">\n <app-camera-security-block\n [title]=\"'Bloqueo por seguridad'\"\n [description]=\"'Detectamos una c\u00E1mara virtual o no permitida durante la inicializaci\u00F3n del SDK.'\"\n [reason]=\"initCameraBlockReason\"\n [exitLabel]=\"'Entiendo'\"\n (exitPressed)=\"handleInitSecurityExit()\">\n </app-camera-security-block>\n</ion-content>\n\n<ion-content class=\"content\" [style.display]=\"hasInternet && !isInitCameraBlocked ? 'block' : 'none'\">\n\n <swiper-container *ngIf=\"!simpleProcess\" init=\"false\" class=\"custom-swiper\" #swiperContainer\n (swiperslidechange)=\"onSlideChange()\">\n\n <!-- \uD83D\uDD39 PASO 1: Verificaci\u00F3n de Identidad (Est\u00E1tico) -->\n <swiper-slide *ngIf=\"!simpleProcess\">\n <div class=\"slide-one\">\n <div class=\"head\">\n <div class=\"head-title\">Verifiquemos tu identidad</div>\n <div class=\"head-subtitle\">\n Por favor confirma tu n\u00FAmero de identificaci\u00F3n (DPI) y sigue las instrucciones.\n </div>\n\n <ion-item class=\"head-dpi\">\n <ion-input #dpi type=\"number\" disabled=\"true\" placeholder=\"0000000000000\"></ion-input>\n </ion-item>\n </div>\n\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/documentsImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">\n Ten a la mano tu DPI y sube una foto del frente y reverso de tu documento.\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">\n Graba un video corto, mant\u00E9n tu rostro dentro del c\u00EDrculo y evita moverte.\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-button\n class=\"action-button\"\n expand=\"block\"\n (click)=\"handleClick()\">\n Empecemos\n </ion-button>\n </div>\n </swiper-slide>\n\n <!-- \uD83D\uDD39 PASOS INTERMEDIOS: Se generan din\u00E1micamente seg\u00FAn el `order` -->\n <swiper-slide *ngFor=\"let step of validationConfig\">\n <div class=\"slide-two\" [ngSwitch]=\"step.type\">\n <!--Acuerdo de video-->\n <div *ngSwitchCase=\"1\" [ngClass]=\"{'sdk-metag-blur-effect': simpleProcess}\">\n <div class=\"head\">\n <div class=\"head-title\">Acuerdo de v\u00EDdeo</div>\n <div class=\"head-subtitle\">Graba un video corto para completar tu proceso de identificaci\u00F3n.</div>\n </div>\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">Tu rostro debe de estar iluminado sin sombra y sin reflejos.\n </div>\n </ion-col>\n </ion-row>\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">No uses anteojos, ni sombreros, tu rostro debe estar visible.</div>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\n\n </div>\n <!-- \uD83D\uDD39 DPI Frontal -->\n <div *ngSwitchCase=\"2\">\n <div class=\"head\">\n <div class=\"head-title\">DPI frontal</div>\n <div class=\"head-subtitle\">\n Toma una foto de la parte frontal de tu documento,\n asegurate que este dentro del recuadro, evita sombras y reflejos.\n </div>\n </div>\n\n <div class=\"card-wrapper\">\n <div class=\"card\">\n <div class=\"side front\">\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"Frontal\">\n </div>\n </div>\n </div>\n <!--<div class=\"sdk-metag-dpi-container\">\n <img src=\"assets/imagesIdvision/dpi-front-1.png\" alt=\"\"/>\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"\"/>\n </div>-->\n\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Tomar foto</ion-button>\n </div>\n\n <!-- \uD83D\uDD39 DPI Trasero -->\n <div *ngSwitchCase=\"3\">\n <div class=\"head\">\n <div class=\"head-title\">DPI reverso</div>\n <div class=\"head-subtitle\">\n Voltea tu documento y toma una foto del reverso de tu documento,\n asegurate que este dentro del recuadro, evita sombras y reflejos.\n </div>\n </div>\n\n <div class=\"card-wrapper\">\n <div class=\"card\" [class.flip]=\"flip\">\n <div class=\"side front\">\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"Frontal\">\n </div>\n <div class=\"side back\">\n <img src=\"assets/imagesIdvision/dpi_t.png\" alt=\"Reverso\">\n </div>\n </div>\n </div>\n\n <!--<div class=\"sdk-metag-dpi-container\">\n <img src=\"assets/imagesIdvision/dpi-back-1.png\" alt=\"\"/>\n <img src=\"assets/imagesIdvision/dpi_t.png\" alt=\"\"/>\n </div>-->\n <ion-button [disabled]=\"waitFlip\" class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Tomar foto\n </ion-button>\n </div>\n\n <!-- \uD83D\uDD39 Video Selfie -->\n <div *ngSwitchCase=\"4\">\n <div class=\"head\">\n <div class=\"head-title\">Prueba de vida</div>\n <div class=\"head-subtitle\">Graba un video corto para completar tu proceso de identificaci\u00F3n.</div>\n </div>\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">Tu rostro debe de estar iluminado sin sombra y sin reflejos.</div>\n </ion-col>\n </ion-row>\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">No uses anteojos, ni sombreros, tu rostro debe estar visible.</div>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\n </div>\n <!-- Photo Selfie -->\n <!-- TODO Se debera cambiar a 5, se dejo 1 por acuerdo de video -->\n <div *ngSwitchCase=\"5\">\n <div class=\"sdk-metag-head\">\n <h2 class=\"sdk-metag-h-title\">Foto Selfie</h2>\n <p class=\"sdk-metag-p-justify\">Toma una foto para completar tu proceso de identificaci\u00F3n.</p>\n </div>\n <ion-grid class=\"sdk-metag-verify-container\">\n <ion-row>\n <ion-row>\n <div class=\"sdk-metag-image-container\">\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </div>\n <div class=\"sdk-metag-container-text\">\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\n </div>\n </ion-row>\n <ion-row>\n <div class=\"sdk-metag-image-container\">\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </div>\n <div class=\"sdk-metag-container-text\">\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\n </div>\n </ion-row>\n </ion-row>\n </ion-grid>\n <div class=\"sdk-metag-fixed-footer\">\n <ion-button class=\"sdk-metag-custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara\n </ion-button>\n </div>\n </div>\n <div *ngSwitchCase=\"6\">\n <div class=\"slide-six\">\n <div class=\"head\">\n <div class=\"head-title\">Verificando identidad</div>\n </div>\n\n <div class=\"avatar-wrapper\">\n\n <div class=\"avatar-container\">\n <img src=\"{{image}}\" class=\"avatar\">\n <div class=\"lottie-container\"></div>\n\n <!--<div class=\"description\">Por favor, espera un momento...</div>-->\n\n <div class=\"status-container\">\n <!--<ion-icon *ngIf=\"progress === 1\" name=\"checkmark-circle\" class=\"success-check\"></ion-icon>-->\n <p class=\"status-text\"\n [class.show]=\"showText\">\n {{ currentText }}\n </p>\n </div>\n\n\n <ion-progress-bar [value]=\"progress\"></ion-progress-bar>\n </div>\n </div>\n <ion-button\n style=\"margin: 100px auto 0 !important;\"\n *ngIf=\"progress === 1 && comparsionStatus === 'success'\"\n class=\"action-button button-success\"\n expand=\"block\"\n (click)=\"finalizar()\">\n Continuar\n </ion-button>\n <ion-button\n style=\"margin: 100px auto 0 !important;\"\n *ngIf=\"progress === 1 && comparsionStatus === 'error'\"\n class=\"action-button button-success\"\n expand=\"block\"\n (click)=\"handleExit()\">\n Salir\n </ion-button>\n </div>\n </div>\n <div *ngSwitchDefault>\n <h2>Paso desconocido</h2>\n </div>\n </div>\n </swiper-slide>\n\n <swiper-slide>\n <div class=\"slide-third\">\n <div class=\"head\" *ngIf=\"isValid\">\n <div class=\"head-title\">Informaci\u00F3n procesada de manera correcta</div>\n </div>\n <div class=\"head\" *ngIf=\"!isValid\">\n <div class=\"head-title\">No se pudo procesar la informaci\u00F3n</div>\n </div>\n <div class=\"sdk-metag-image-confirmation\">\n <img src=\"assets/imagesIdvision/blue-check.png\" alt=\"Check morado\"/>\n </div>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"handleExit()\">Continuar</ion-button>\n </div>\n </swiper-slide>\n </swiper-container>\n\n <div class=\"sdk-metag-version\">{{ versionSDK }} {{ configEnv.show_label ? configEnv.env_name : '' }}</div>\n\n <ion-fab vertical=\"top\" horizontal=\"end\" slot=\"fixed\" *ngIf=\"showDebug\">\n <ion-fab-button class=\"sdk-metag-button-debug\" (click)=\"copyProccess()\">\n <ion-icon name=\"bug-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab>\n\n</ion-content>\n<!-- pantalla para cuando no exista internet -->\n<ion-content [style.display]=\"!hasInternet && !isInitCameraBlocked ? 'block' : 'none'\">\n <div class=\"sdk-metag-wrapper-no-internet\">\n <div class=\"sdk-metag-content-no-internet\">\n <h2 class=\"sdk-metag-title-no-internet\">Sin conexi\u00F3n</h2>\n <img src=\"assets/imagesIdvision/no-internet.svg\" alt=\"Sin conexi\u00F3n img\" class=\"sdk-metag-icon-no-internet\"/>\n <p class=\"sdk-metag-description-no-internet\">\n No pudimos cargar la p\u00E1gina. <br>\n Verifica tu internet y prueba de nuevo.\n </p>\n </div>\n </div>\n</ion-content>\n", styles: ["// ============================================\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\n// ============================================\n// Usamos :host para encapsular todo dentro del componente\n// y evitar que los estilos globales del padre nos afecten\n\n:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n // Reset de estilos globales del padre\n * {\n box-sizing: border-box;\n }\n}\n\n.sdk-metag-content {\n padding: 10px;\n align-items: center;\n justify-content: center;\n height: 90vh;\n background-color: #fff;\n font-size: 18px;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n// Cuando es simpleProcess, levanta el contenido un 10%\n.sdk-metag-content-simple-process {\n margin-top: 10vh;\n height: 90vh;\n}\n\n.sdk-metag-h-title {\n font-size: 1.5em;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n margin-top: 20px;\n}\n\n:host p {\n font-size: 1em;\n color: #666;\n text-align: center;\n margin: 0;\n}\n\n:host ion-grid {\n margin-top: 20px;\n}\n\n:host ion-row {\n margin: 15px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host ion-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n:host ion-icon {\n font-size: 3em;\n color: #ff8c00;\n margin-bottom: 10px;\n}\n\n.sdk-metag-container-text {\n text-align: justify !important;\n width: 180px;\n}\n\n:host p {\n text-align: start;\n}\n\n.sdk-metag-p-center {\n text-align: center;\n}\n\n.sdk-metag-p-justify {\n text-align: start;\n}\n\n.sdk-metag-head {\n padding: 20px;\n margin-top: 20px;\n margin-bottom: 80px;\n}\n\n\n.sdk-metag-verify-container {\n // padding: 60px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\n text-align: center;\n //background-color: black;\n}\n\n.sdk-metag-fixed-footer {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 0px 10px 25px 10px;\n // background-color: black; // Color de fondo, opcional\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\n\n ion-button {\n width: 90%;\n max-width: 300px;\n margin: 0 auto;\n background-color: #ffcc00;\n color: #ffffff;\n font-weight: bold;\n border-radius: 20px;\n\n &:hover {\n background-color: #ffb300;\n }\n\n &:active {\n background-color: #e6a800;\n }\n }\n}\n\n.sdk-metag-dpi-container {\n display: flex;\n //width: 100%;\n justify-content: center;\n align-items: center;\n height: 45vh;\n img {\n width: 90%;\n transform: rotate(270deg);\n }\n}\n\n.sdk-metag-dpi-image {\n width: 200px;\n}\n\n.sdk-metag-image-container {\n width: 100px;\n max-width: 90px;\n}\n\n.sdk-metag-col-confirmation {\n margin-top: 100px;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n /* Ajusta el espacio entre los elementos */\n}\n\n.sdk-metag-image-item {\n margin-top: 50px;\n padding-top: 70px;\n}\n\n.sdk-metag-font-confirmation {\n font-size: 26px;\n text-align: center;\n // color: #005da9;\n color: #82298F;\n font-weight: bold;\n}\n\n\n.sdk-metag-rounded-input {\n margin-top: 15px;\n background-color: #f4f6fc;\n /* Color de fondo suave */\n border-radius: 10px;\n /* Bordes redondeados */\n padding: 5px 5px;\n /* Espaciado interno */\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n /* Sombra suave */\n --ion-border-color: transparent;\n /* Quita cualquier borde por defecto */\n}\n\n:host ion-input {\n text-align: center;\n color: #F38301;\n --padding-start: 8px;\n}\n\n:host .sdk-metag-custom-footer {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-between;\n background-color: #ffffff;\n}\n\n:host .sdk-metag-custom-footer ion-button {\n flex: 0 0 48%;\n}\n\n:host .sdk-metag-custom-footer .sdk-metag-left-button {\n max-width: 140px;\n color: black;\n --background: white;\n --color: #82298F;\n --border-radius: 20px;\n --border-color: white;\n margin-right: auto;\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\n}\n\n:host .sdk-metag-custom-footer .sdk-metag-right-button {\n margin-left: auto;\n}\n\n.sdk-metag-tutorial-head {\n padding-top: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: black;\n}\n\n.sdk-metag-center-container {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 60vh;\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\n width: 100%;\n}\n\n.sdk-metag-tutorial-title {\n text-align: center;\n}\n\n.sdk-metag-rounded-input ion-input {\n font-size: 14px;\n /* Tama\u00F1o de texto */\n color: #333;\n /* Color del texto */\n}\n\n.sdk-metag-rounded-input::part(native) {\n background: transparent;\n /* Fondo transparente para evitar conflictos */\n}\n\n.sdk-metag-p-info {\n font-weight: bold;\n color: #714e93\n}\n\n.sdk-metag-custom-button {\n --background: var(--purple-primary, #82298F) !important;\n --background-hover: var(--purple-secondary, #2b0d30) !important;\n --background-activated: var(--purple-secondary, #2b0d30) !important;\n --color: #ffffff !important;\n --border-radius: 20px !important;\n --padding-top: 10px !important;\n --padding-bottom: 10px !important;\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\n text-transform: none;\n pointer-events: auto;\n\n}\n\n//blur effect\n\n.sdk-metag-blur-effect {\n filter: blur(5px);\n pointer-events: none;\n}\n\n.sdk-metag-blur-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 999;\n filter: blur(5px);\n}\n\n.sdk-metag-boton-personalizado {\n background-color: #4caf50;\n /* Verde, por ejemplo */\n color: white;\n font-size: 16px;\n}\n\n.sdk-metag-version {\n position: fixed;\n bottom: 10px;\n right: 10px;\n font-size: 12px;\n z-index: 1000;\n background: #f4f6fc !important;\n padding: 10px 15px !important;\n border-radius: 20px !important;\n}\n\n.sdk-metag-button-debug {\n --background: #ff4081;\n --color: #fff;\n}\n\n\n.sdk-metag-wrapper-no-internet {\n background-color: #fff;\n height: 100vh;\n display: flex;\n justify-content: center; /* centra en eje vertical */\n align-items: center; /* centra en eje horizontal */\n padding: 40px;\n background-image: url('assets/imagesIdvision/background.png') !important;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n}\n\n.sdk-metag-content-no-internet {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 16px;\n}\n\n.sdk-metag-title-no-internet {\n color: #000;\n font-size: 32px;\n font-weight: bold;\n}\n\n.sdk-metag-icon-no-internet {\n width: 125px;\n display: block;\n margin-top: 25px;\n}\n\n.sdk-metag-description-no-internet {\n margin-top: 25px;\n font-size: 22px;\n color: #000;\n line-height: 1.5;\n text-align: center;\n}\n\n.sdk-metag-no-border {\n --border-width: 0 !important;\n}\n\n.sdk-metag-confirmation-screen {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 80vh; // Se integra al 80% de la vista\n padding: 25px;\n box-sizing: border-box;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n background-color: white;\n gap: 20px; // Espacio entre elementos\n}\n\n.sdk-metag-image-confirmation {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n}\n\n.sdk-metag-image-confirmation img {\n max-width: 300px; // Reducido de 500px a 300px\n width: 40%; // Reducido de 80% a 50%\n height: auto;\n}\n\n.sdk-metag-button-container {\n width: 100%;\n display: flex;\n justify-content: center;\n padding: 0 10px;\n\n ion-button {\n width: 90%;\n max-width: 300px;\n }\n}\n\n\n.sdk-metag-close-button {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 1000;\n font-size: 15px;\n --color: #888;\n}\n\n.sdk-metag-p-margin {\n margin-top: 50px !important;\n}\n\n.content {\n background-color: #ffffff;\n --background: #ffffff;\n}\n\n/* HEAD */\n.head {\n padding: 20px;\n}\n\n.head-title {\n font-size: 23px;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n}\n\n.description {\n text-align: center;\n margin-top: 25px;\n font-size: 14px;\n margin-bottom: 25px;\n}\n\n.head-subtitle {\n text-align: justify;\n margin-top: 25px;\n font-size: 14px;\n}\n\n.head-dpi {\n margin-top: 25px;\n //background-color: #f4f6fc;\n border-radius: 10px;\n --ion-border-color: transparent;\n //padding: 5px 5px;\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n --background: #f4f6fc !important;\n\n ion-input {\n text-align: center;\n color: #F38301;\n font-weight: 500;\n font-size: 19px;\n }\n}\n\n.instructions {\n}\n\n.instruction {\n margin: 0 !important;\n}\n\n.instruction-img {\n width: 100px;\n max-width: 100px;\n}\n\n.instruction-description {\n font-size: 13px;\n text-align: justify;\n padding-right: 15px;\n}\n\n.action-button {\n width: 300px;\n max-width: 300px;\n margin: 25px auto;\n --background: #82298F;\n --color: #ffffff;\n font-weight: bold;\n --border-radius: 20px;\n --box-shadow: none;\n}\n\n.exit-button {\n --background: transparent !important;\n --color: #F38301 !important;\n}\n\n.action-button:hover {\n --background: #82298F;\n}\n\n.action-button:active {\n --background: #82298F;\n}\n\n/* Contenedor padre */\n.card-wrapper {\n perspective: 1000px;\n //margin: 40px;\n margin: 25px;\n}\n\n/* Tarjeta */\n.card {\n position: relative;\n width: 100%;\n height: 350px;\n transform-style: preserve-3d;\n transition: transform 1s ease-in-out;\n cursor: pointer;\n}\n\n/* Cuando hace flip */\n.card.flip {\n transform: rotateY(180deg);\n}\n\n/* Lados */\n.side {\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n\n img {\n transform: rotate(270deg);\n width: 100%;\n object-fit: contain;\n }\n}\n\n.front {\n z-index: 2;\n}\n\n.back {\n transform: rotateY(180deg);\n}\n\n.avatar-wrapper{\n width:100%;\n display:flex;\n justify-content:center;\n margin-bottom:20px;\n}\n\n.avatar-container{\n position:relative;\n width:300px;\n height:300px;\n margin-bottom: 25px;\n}\n\n.avatar{\n width:100%;\n height:100%;\n border-radius:50%;\n object-fit:cover;\n padding: 35px;\n}\n\n.lottie-container{\n position:absolute;\n inset:0;\n}\n\nion-progress-bar{\n height:7px;\n border-radius:10px;\n --progress-background: #F38301;\n}\n\n.slide-six {\n}\n\n\n.status-container {\n text-align: center !important;\n margin-top: 20px;\n min-height: 30px;\n}\n\n.status-text {\n text-align: center !important;\n color: #444;\n font-size: 14px !important;\n opacity: 0;\n transform: translateY(10px);\n transition: all .4s ease;\n}\n\n.status-text.show {\n opacity: 1;\n transform: translateY(0);\n}\n\n.button-success {\n animation: checkPop 0.4s ease;\n}\n\n@keyframes checkPop{\n\n 0%{\n transform: scale(0);\n opacity:0;\n }\n\n 60%{\n transform: scale(1.2);\n }\n\n 100%{\n transform: scale(1);\n opacity:1;\n }\n\n}\n"] }]
|
|
1532
|
+
}], () => [{ type: i1.ModalController }, { type: i1.AlertController }, { type: i1.Platform }, { type: i2.ModalDpiServices }, { type: i3.SdkCommunicationService }, { type: i1.NavController }, { type: i0.ChangeDetectorRef }, { type: i1.ToastController }, { type: i1.LoadingController }, { type: i4.ConfigurationService }, { type: i5.ValidationService }, { type: i6.NavigationService }, { type: i7.ProcessingService }, { type: i8.DpiService }, { type: i0.ElementRef }, { type: i9.VirtualCameraDetectionService }], { dpi: [{
|
|
1396
1533
|
type: ViewChild,
|
|
1397
1534
|
args: ['dpi', { static: false }]
|
|
1398
1535
|
}], swiperContainerRef: [{
|
|
@@ -1402,6 +1539,8 @@ export class IdVisionComponent {
|
|
|
1402
1539
|
type: Input
|
|
1403
1540
|
}], dpiCode: [{
|
|
1404
1541
|
type: Input
|
|
1542
|
+
}], dpiCodeSecond: [{
|
|
1543
|
+
type: Input
|
|
1405
1544
|
}], connection: [{
|
|
1406
1545
|
type: Input
|
|
1407
1546
|
}], apikey: [{
|
|
@@ -1411,5 +1550,5 @@ export class IdVisionComponent {
|
|
|
1411
1550
|
}], validationConfig: [{
|
|
1412
1551
|
type: Input
|
|
1413
1552
|
}] }); })();
|
|
1414
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent"
|
|
1553
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent" }); })();
|
|
1415
1554
|
//# sourceMappingURL=id-vision.component.js.map
|