metag-sdk-ionic 1.2.11 → 1.3.0-security

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/assets/backup/Dpi-Front.webm +0 -0
  2. package/dist/assets/backup/Dpi-back.webm +0 -0
  3. package/dist/assets/icon/favicon.png +0 -0
  4. package/dist/assets/icons/dpi-error.svg +9 -9
  5. package/dist/assets/icons/video-error.svg +9 -9
  6. package/dist/assets/imagesIdVision/56.png +0 -0
  7. package/dist/assets/imagesIdVision/57.png +0 -0
  8. package/dist/assets/imagesIdVision/Animacion-de-colocacion-de-DPI.webm +0 -0
  9. package/dist/assets/imagesIdVision/Animacion-de-como-tomar-foto-DPI.webm +0 -0
  10. package/dist/assets/imagesIdVision/Dpi-back.mp4 +0 -0
  11. package/dist/assets/imagesIdVision/Dpi-front-video.mp4 +0 -0
  12. package/dist/assets/imagesIdVision/Foco.png +0 -0
  13. package/dist/assets/imagesIdVision/Selfie-rostro.png +0 -0
  14. package/dist/assets/imagesIdVision/acuerdo-video-selfie.png +0 -0
  15. package/dist/assets/imagesIdVision/backDpiRegister.png +0 -0
  16. package/dist/assets/imagesIdVision/background.png +0 -0
  17. package/dist/assets/imagesIdVision/blue-check.png +0 -0
  18. package/dist/assets/imagesIdVision/documentsImage.png +0 -0
  19. package/dist/assets/imagesIdVision/frontDpiRegister.png +0 -0
  20. package/dist/assets/imagesIdVision/icon/favicon.png +0 -0
  21. package/dist/assets/imagesIdVision/icons/dpi-error.svg +9 -9
  22. package/dist/assets/imagesIdVision/icons/video-error.svg +9 -9
  23. package/dist/assets/imagesIdVision/no-internet.svg +3 -3
  24. package/dist/assets/imagesIdVision/overlay_container.png +0 -0
  25. package/dist/assets/imagesIdVision/rostroImage.png +0 -0
  26. package/dist/assets/imagesIdVision/shapes.svg +1 -1
  27. package/dist/assets/imagesIdVision/voiceImage.png +0 -0
  28. package/dist/assets/shapes.svg +1 -1
  29. package/dist/index.d.ts +0 -1
  30. package/dist/index.js +0 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/src/app/app-routing.module.js +5 -5
  33. package/dist/src/app/app-routing.module.js.map +1 -1
  34. package/dist/src/app/app.component.js +2 -2
  35. package/dist/src/app/app.module.d.ts +2 -3
  36. package/dist/src/app/app.module.js +3 -5
  37. package/dist/src/app/app.module.js.map +1 -1
  38. package/dist/src/app/components/custom-button/custom-button.component.js +3 -3
  39. package/dist/src/app/home/home.page.js +3 -3
  40. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.d.ts +7 -0
  41. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js +25 -0
  42. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js.map +1 -0
  43. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.d.ts +5 -0
  44. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js +58 -0
  45. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js.map +1 -0
  46. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.d.ts +11 -0
  47. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js +35 -0
  48. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js.map +1 -0
  49. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.d.ts +80 -0
  50. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js +640 -0
  51. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js.map +1 -0
  52. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.d.ts +9 -0
  53. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js +20 -0
  54. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js.map +1 -0
  55. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.d.ts +32 -17
  56. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js +246 -122
  57. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js.map +1 -1
  58. package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js +33 -32
  59. package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js.map +1 -1
  60. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.d.ts +12 -0
  61. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js +66 -0
  62. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js.map +1 -0
  63. package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js +23 -32
  64. package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js.map +1 -1
  65. package/dist/src/app/pages/id-vision/components/custom-slide/custom-slide.component.js +3 -3
  66. package/dist/src/app/pages/id-vision/components/direct-photo-selfie/direct-photo-selfie.component.js +3 -3
  67. package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js +4 -4
  68. package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js.map +1 -1
  69. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.d.ts +3 -0
  70. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js +57 -21
  71. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js.map +1 -1
  72. package/dist/src/app/pages/id-vision/components/simple-acuerdo-video/simple-acuerdo-video.component.js +3 -3
  73. package/dist/src/app/pages/id-vision/dpi/front-dpi/front-dpi.component.js +2 -2
  74. package/dist/src/app/pages/id-vision/id-vision.component.d.ts +36 -14
  75. package/dist/src/app/pages/id-vision/id-vision.component.js +547 -410
  76. package/dist/src/app/pages/id-vision/id-vision.component.js.map +1 -1
  77. package/dist/src/app/pages/id-vision/id-vision.module.js +2 -9
  78. package/dist/src/app/pages/id-vision/id-vision.module.js.map +1 -1
  79. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.d.ts +18 -0
  80. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js +43 -0
  81. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js.map +1 -0
  82. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.d.ts +10 -0
  83. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js +29 -0
  84. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js.map +1 -0
  85. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.d.ts +1 -1
  86. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js +2 -2
  87. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js.map +1 -1
  88. package/dist/src/app/pages/id-vision/services/decrypt-text.service.d.ts +10 -0
  89. package/dist/src/app/pages/id-vision/services/decrypt-text.service.js +23 -0
  90. package/dist/src/app/pages/id-vision/services/decrypt-text.service.js.map +1 -0
  91. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.d.ts +16 -5
  92. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js +124 -60
  93. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js.map +1 -1
  94. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.d.ts +23 -0
  95. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js +44 -0
  96. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js.map +1 -0
  97. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.d.ts +22 -0
  98. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js +45 -0
  99. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js.map +1 -0
  100. package/dist/src/app/pages/id-vision/services/processing/processing.service.d.ts +7 -4
  101. package/dist/src/app/pages/id-vision/services/processing/processing.service.js +75 -46
  102. package/dist/src/app/pages/id-vision/services/processing/processing.service.js.map +1 -1
  103. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.d.ts +14 -0
  104. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js +72 -0
  105. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js.map +1 -0
  106. package/dist/src/app/pages/id-vision/services/validation/validation.service.d.ts +2 -0
  107. package/dist/src/app/pages/id-vision/services/validation/validation.service.js +21 -5
  108. package/dist/src/app/pages/id-vision/services/validation/validation.service.js.map +1 -1
  109. package/dist/src/app/pages/slides/acuerdo-video/acuerdo-video.component.js +1 -1
  110. package/dist/src/app/pages/slides/dpi-back/slide2.component.js +3 -3
  111. package/dist/src/app/pages/slides/dpi-front/slide1.component.js +3 -3
  112. package/dist/src/app/pages/slides/photo-selfie/photo-selfie.component.js +1 -1
  113. package/dist/src/app/pages/slides/slide1/slide1.component.d.ts +10 -10
  114. package/dist/src/app/pages/slides/slide1/slide1.component.js +39 -39
  115. package/dist/src/app/pages/slides/slide2/slide2.component.d.ts +8 -8
  116. package/dist/src/app/pages/slides/slide2/slide2.component.js +17 -17
  117. package/dist/src/app/pages/slides/slide3/slide3.component.d.ts +8 -8
  118. package/dist/src/app/pages/slides/slide3/slide3.component.js +17 -17
  119. package/dist/src/app/pages/slides/slide4/slide4.component.js +2 -2
  120. package/dist/src/app/pages/slides/video-selfie/slide3.component.js +35 -35
  121. package/dist/src/environments/environment.d.ts +2 -0
  122. package/dist/src/environments/environment.js +3 -1
  123. package/dist/src/environments/environment.js.map +1 -1
  124. package/package.json +72 -62
  125. package/src/app/app.component.scss +0 -0
  126. 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 { DirectPhotoSelfieComponent } from './components/direct-photo-selfie/direct-photo-selfie.component';
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 "@angular/common";
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 => ({ "content-simple-process": a0 });
32
- const _c3 = a0 => ({ "blur-effect": a0 });
33
- function IdVisionComponent_swiper_container_1_swiper_slide_2_Template(rf, ctx) { if (rf & 1) {
34
- const _r2 = i0.ɵɵgetCurrentView();
35
- i0.ɵɵelementStart(0, "swiper-slide")(1, "div", 19)(2, "div", 20)(3, "h2", 21);
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, "p", 22);
39
- i0.ɵɵtext(6, "Para completar tu verificaci\u00F3n, por favor ingresa tu n\u00FAmero de identificaci\u00F3n (DPI).");
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", 23);
42
- i0.ɵɵelement(8, "ion-input", 24, 1);
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", 25)(11, "ion-row")(12, "div", 26);
45
- i0.ɵɵelement(13, "img", 27);
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, "div", 28)(15, "p", 29);
48
- i0.ɵɵtext(16, "Sube fotos de documentos que prueben tu identidad");
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, "div", 26);
51
- i0.ɵɵelement(19, "img", 30);
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, "div", 28)(21, "p", 29);
54
- i0.ɵɵtext(22, "Graba un video selfie, mant\u00E9n tu rostro centrado en la pantalla y evita moverte.");
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 IdVisionComponent_swiper_container_1_swiper_slide_3_div_2_Template(rf, ctx) { if (rf & 1) {
62
- const _r4 = i0.ɵɵgetCurrentView();
63
- i0.ɵɵelementStart(0, "div", 36)(1, "div", 20)(2, "h2", 21);
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, "p", 29);
67
- i0.ɵɵtext(5, "Graba un breve video para completar tu proceso de identificaci\u00F3n.");
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", 25)(7, "ion-row")(8, "div", 26);
70
- i0.ɵɵelement(9, "img", 37);
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, "div", 28)(11, "p");
73
- i0.ɵɵtext(12, "Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.");
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, "div", 26);
76
- i0.ɵɵelement(15, "img", 30);
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, "div", 28)(17, "p");
79
- i0.ɵɵtext(18, "Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.");
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, "div", 31)(20, "ion-button", 18);
82
- i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_3_div_2_Template_ion_button_click_20_listener() { i0.ɵɵrestoreView(_r4); const step_r5 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r5.action()); });
83
- i0.ɵɵtext(21, "Abrir la c\u00E1mara");
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 ctx_r2 = i0.ɵɵnextContext(3);
87
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c3, ctx_r2.simpleProcess));
98
+ const ctx_r1 = i0.ɵɵnextContext(3);
99
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c2, ctx_r1.simpleProcess));
88
100
  } }
89
- function IdVisionComponent_swiper_container_1_swiper_slide_3_div_3_Template(rf, ctx) { if (rf & 1) {
90
- const _r6 = i0.ɵɵgetCurrentView();
91
- i0.ɵɵelementStart(0, "div")(1, "div", 20)(2, "h2", 21);
92
- i0.ɵɵtext(3, "Coloca la parte frontal de tu DPI");
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, "p", 38);
95
- i0.ɵɵtext(5, "Evita sombras, reflejos y coloca tu documento dentro del recuadro.");
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(7, "img", 40);
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 IdVisionComponent_swiper_container_1_swiper_slide_3_div_4_Template(rf, ctx) { if (rf & 1) {
106
- const _r7 = i0.ɵɵgetCurrentView();
107
- i0.ɵɵelementStart(0, "div")(1, "div", 20)(2, "h2", 21);
108
- i0.ɵɵtext(3, "Coloca el reverso de tu DPI");
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, "p", 38);
111
- i0.ɵɵtext(5, "Evita sombras, reflejos y coloca tu documento dentro del recuadro.");
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(7, "img", 41);
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(8, "div", 31)(9, "ion-button", 18);
117
- i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_3_div_4_Template_ion_button_click_9_listener() { i0.ɵɵrestoreView(_r7); const step_r5 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r5.action()); });
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 IdVisionComponent_swiper_container_1_swiper_slide_3_div_5_Template(rf, ctx) { if (rf & 1) {
122
- const _r8 = i0.ɵɵgetCurrentView();
123
- i0.ɵɵelementStart(0, "div")(1, "div", 20)(2, "h2", 21);
124
- i0.ɵɵtext(3, "Video Selfie");
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, "p", 22);
127
- i0.ɵɵtext(5, "Graba un breve video para completar tu proceso de identificaci\u00F3n.");
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", 25)(7, "ion-row")(8, "ion-row")(9, "div", 26);
130
- i0.ɵɵelement(10, "img", 37);
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(11, "div", 28)(12, "p", 29);
133
- i0.ɵɵtext(13, "Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.");
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(14, "ion-row")(15, "div", 26);
136
- i0.ɵɵelement(16, "img", 30);
156
+ i0.ɵɵelementStart(13, "ion-row", 28)(14, "ion-col", 29);
157
+ i0.ɵɵelement(15, "img", 32);
137
158
  i0.ɵɵelementEnd();
138
- i0.ɵɵelementStart(17, "div", 28)(18, "p", 29);
139
- i0.ɵɵtext(19, "Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.");
140
- i0.ɵɵelementEnd()()()()();
141
- i0.ɵɵelementStart(20, "div", 31)(21, "ion-button", 18);
142
- i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_3_div_5_Template_ion_button_click_21_listener() { i0.ɵɵrestoreView(_r8); const step_r5 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r5.action()); });
143
- i0.ɵɵtext(22, "Abrir la c\u00E1mara");
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 IdVisionComponent_swiper_container_1_swiper_slide_3_div_6_Template(rf, ctx) { if (rf & 1) {
147
- const _r9 = i0.ɵɵgetCurrentView();
148
- i0.ɵɵelementStart(0, "div")(1, "div", 20)(2, "h2", 21);
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", 29);
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", 25)(7, "ion-row")(8, "ion-row")(9, "div", 26);
155
- i0.ɵɵelement(10, "img", 37);
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", 28)(12, "p");
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", 26);
161
- i0.ɵɵelement(16, "img", 30);
181
+ i0.ɵɵelementStart(14, "ion-row")(15, "div", 50);
182
+ i0.ɵɵelement(16, "img", 53);
162
183
  i0.ɵɵelementEnd();
163
- i0.ɵɵelementStart(17, "div", 28)(18, "p");
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", 31)(21, "ion-button", 18);
167
- i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_swiper_slide_3_div_6_Template_ion_button_click_21_listener() { i0.ɵɵrestoreView(_r9); const step_r5 = i0.ɵɵnextContext().$implicit; return i0.ɵɵresetView(step_r5.action()); });
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 IdVisionComponent_swiper_container_1_swiper_slide_3_div_7_Template(rf, ctx) { if (rf & 1) {
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 IdVisionComponent_swiper_container_1_swiper_slide_3_Template(rf, ctx) { if (rf & 1) {
177
- i0.ɵɵelementStart(0, "swiper-slide")(1, "div", 32);
178
- i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_1_swiper_slide_3_div_2_Template, 22, 3, "div", 33)(3, IdVisionComponent_swiper_container_1_swiper_slide_3_div_3_Template, 11, 0, "div", 34)(4, IdVisionComponent_swiper_container_1_swiper_slide_3_div_4_Template, 11, 0, "div", 34)(5, IdVisionComponent_swiper_container_1_swiper_slide_3_div_5_Template, 23, 0, "div", 34)(6, IdVisionComponent_swiper_container_1_swiper_slide_3_div_6_Template, 23, 0, "div", 34)(7, IdVisionComponent_swiper_container_1_swiper_slide_3_div_7_Template, 3, 0, "div", 35);
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 step_r5 = ctx.$implicit;
182
- const ctx_r2 = i0.ɵɵnextContext(2);
244
+ const step_r6 = ctx.$implicit;
183
245
  i0.ɵɵadvance();
184
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(7, _c2, ctx_r2.simpleProcess))("ngSwitch", step_r5.type);
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 IdVisionComponent_swiper_container_1_div_6_Template(rf, ctx) { if (rf & 1) {
197
- i0.ɵɵelementStart(0, "div", 42)(1, "p", 42);
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 IdVisionComponent_swiper_container_1_div_7_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "div", 42)(1, "p", 42);
265
+ function IdVisionComponent_swiper_container_2_div_7_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
203
267
  i0.ɵɵtext(2, "Ocurri\u00F3 un error al procesar la informaci\u00F3n");
204
268
  i0.ɵɵelementEnd()();
205
269
  } }
206
- function IdVisionComponent_swiper_container_1_Template(rf, ctx) { if (rf & 1) {
207
- const _r1 = i0.ɵɵgetCurrentView();
208
- i0.ɵɵelementStart(0, "swiper-container", 10, 0);
209
- i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_1_swiper_slide_2_Template, 26, 0, "swiper-slide", 11)(3, IdVisionComponent_swiper_container_1_swiper_slide_3_Template, 8, 9, "swiper-slide", 12);
210
- i0.ɵɵelementStart(4, "swiper-slide")(5, "div", 13);
211
- i0.ɵɵtemplate(6, IdVisionComponent_swiper_container_1_div_6_Template, 3, 0, "div", 14)(7, IdVisionComponent_swiper_container_1_div_7_Template, 3, 0, "div", 14);
212
- i0.ɵɵelementStart(8, "div", 15);
213
- i0.ɵɵelement(9, "img", 16);
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, "div", 17)(11, "ion-button", 18);
216
- i0.ɵɵlistener("click", function IdVisionComponent_swiper_container_1_Template_ion_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.handleExit()); });
217
- i0.ɵɵtext(12, "Continuar");
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 ctx_r2 = i0.ɵɵnextContext();
285
+ const ctx_r1 = i0.ɵɵnextContext();
221
286
  i0.ɵɵadvance(2);
222
- i0.ɵɵproperty("ngIf", !ctx_r2.simpleProcess);
287
+ i0.ɵɵproperty("ngIf", !ctx_r1.simpleProcess);
223
288
  i0.ɵɵadvance();
224
- i0.ɵɵproperty("ngForOf", ctx_r2.validationConfig);
289
+ i0.ɵɵproperty("ngForOf", ctx_r1.validationConfig);
225
290
  i0.ɵɵadvance(3);
226
- i0.ɵɵproperty("ngIf", ctx_r2.isValid);
291
+ i0.ɵɵproperty("ngIf", ctx_r1.isValid);
227
292
  i0.ɵɵadvance();
228
- i0.ɵɵproperty("ngIf", !ctx_r2.isValid);
293
+ i0.ɵɵproperty("ngIf", !ctx_r1.isValid);
229
294
  } }
230
- function IdVisionComponent_ion_fab_4_Template(rf, ctx) { if (rf & 1) {
231
- const _r10 = i0.ɵɵgetCurrentView();
232
- i0.ɵɵelementStart(0, "ion-fab", 43)(1, "ion-fab-button", 44);
233
- i0.ɵɵlistener("click", function IdVisionComponent_ion_fab_4_Template_ion_fab_button_click_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.copyProccess()); });
234
- i0.ɵɵelement(2, "ion-icon", 45);
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
@@ -341,34 +421,6 @@ export class IdVisionComponent {
341
421
  await this.hideLoading();
342
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();
@@ -376,21 +428,10 @@ export class IdVisionComponent {
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 = 3;
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
- // Mantener la funcionalidad: si el tipo es 5, usar openPhotoSelfie
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.openAcuerdoVideo(),
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) {
@@ -840,6 +775,7 @@ export class IdVisionComponent {
840
775
  }
841
776
  catch (error) {
842
777
  console.error('Error en InitProcess:', error);
778
+ this.handleInitProcessError('No es posible iniciar el servicio, favor intente mas tarde.');
843
779
  }
844
780
  }
845
781
  executeFirstAvailableAction() {
@@ -867,17 +803,29 @@ export class IdVisionComponent {
867
803
  }
868
804
  getValidationKeyForType(type) {
869
805
  switch (type) {
870
- case 1: return 'acuerdoVideo';
871
- case 2: return 'dpiFront';
872
- case 3: return 'dpiBack';
873
- case 4: return 'videoSelfie';
874
- case 5: return 'photoSelfie';
875
- default: return null;
806
+ case 1:
807
+ return 'acuerdoVideo';
808
+ case 2:
809
+ return 'dpiFront';
810
+ case 3:
811
+ return 'dpiBack';
812
+ case 4:
813
+ return 'videoSelfie';
814
+ case 5:
815
+ return 'photoSelfie';
816
+ case 6:
817
+ return 'validateFace';
818
+ default:
819
+ return null;
876
820
  }
877
821
  }
878
- handleInitProcessError(message) {
879
- const dpiValue = this.dpi.value ?? '';
880
- if (!dpiValue || dpiValue.trim().length === 0) {
822
+ async handleInitProcessError(message) {
823
+ const dpiValue = this.dpiCode ?? '';
824
+ const isUndefinedError = (message ?? '').toLowerCase().includes("cannot read properties of undefined (reading '0')");
825
+ if (isUndefinedError) {
826
+ this.showAlert('Error', 'Por favor, intenta nuevamente.', []);
827
+ }
828
+ else if (!dpiValue || dpiValue.trim().length === 0) {
881
829
  this.showAlert('Error', 'El campo DPI no puede estar vacío', []);
882
830
  }
883
831
  else if (dpiValue.length > 12) {
@@ -886,12 +834,10 @@ export class IdVisionComponent {
886
834
  else {
887
835
  this.showAlert('Error', message, []);
888
836
  }
837
+ await this.handleExitWithResult(false, 'init-process-error');
889
838
  }
890
839
  // DPI Processing methods
891
840
  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
841
  try {
896
842
  // El loading se maneja completamente dentro del ProcessingService
897
843
  const result = await this.processingService.processFrontDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
@@ -915,9 +861,6 @@ export class IdVisionComponent {
915
861
  }
916
862
  }
917
863
  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
864
  try {
922
865
  // El loading se maneja completamente dentro del ProcessingService
923
866
  const result = await this.processingService.processBackDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
@@ -965,12 +908,6 @@ export class IdVisionComponent {
965
908
  }
966
909
  else {
967
910
  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
911
  this.closeModalVideoSelfie();
975
912
  }
976
913
  }
@@ -980,11 +917,6 @@ export class IdVisionComponent {
980
917
  }
981
918
  // Photo Selfie Processing
982
919
  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
920
  try {
989
921
  // El loading se maneja completamente dentro del ProcessingService
990
922
  const result = await this.processingService.processPhotoSelfie(filePath, this.connection, this.apikey, this.configEnv, this.simpleProcess, // Pasar flag de proceso simple
@@ -1023,17 +955,17 @@ export class IdVisionComponent {
1023
955
  // Acuerdo Video Processing
1024
956
  async getAcuerdoVideo(file) {
1025
957
  try {
1026
- const result = await this.processingService.processAcuerdoVideo(file);
958
+ const result = await this.processingService.processAcuerdoVideo(this.connection, this.apikey, this.configEnv, file);
1027
959
  if (result.success) {
1028
960
  this.closeModalAcuerdoVideo();
1029
961
  this.modalController.dismiss();
1030
962
  this.validationService.updateValidationStep('acuerdoVideo', true);
1031
- if (this.simpleProcess) {
1032
- this.executeNextActionForSimpleProcess(1);
1033
- }
1034
- else {
1035
- this.moveToNextStep(1);
1036
- }
963
+ await this.handleExitWithResult(true, 'acuerdo-video-close');
964
+ /*if (this.simpleProcess) {
965
+ //this.executeNextActionForSimpleProcess(1);
966
+ } else {
967
+ this.moveToNextStep(0);
968
+ }*/
1037
969
  }
1038
970
  else {
1039
971
  this.validationService.updateValidationStep('acuerdoVideo', false);
@@ -1043,6 +975,75 @@ export class IdVisionComponent {
1043
975
  console.error('Error processing acuerdo video:', error);
1044
976
  }
1045
977
  }
978
+ // Facial Validation Processing
979
+ async openFacialValidation2() {
980
+ console.log('🎯 Iniciando validación facial automática...');
981
+ // Ejecutar directamente el proceso sin modal (es automático)
982
+ await this.processFacialValidation();
983
+ }
984
+ async processFacialValidation() {
985
+ console.log('🔍 processFacialValidation - iniciando...');
986
+ try {
987
+ // Mostrar loading con animación
988
+ await this.showLoading('Validando rostro...');
989
+ // Iniciar animación y progreso
990
+ setTimeout(() => {
991
+ //this.startScanAnimation();
992
+ }, 300);
993
+ // Preparar el payload
994
+ const payload = {
995
+ endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
996
+ headers: {
997
+ apiKey: this.apikey,
998
+ connectionMg: this.connection
999
+ },
1000
+ body: {
1001
+ codigo: localStorage.getItem('codigo') ?? '',
1002
+ identificadorAnt: this.dpiCodeSecond
1003
+ }
1004
+ };
1005
+ // Llamar al servicio
1006
+ this.dpiService.comparison(payload).subscribe({
1007
+ next: async (response) => {
1008
+ console.log('✅ Respuesta de validación facial:', response);
1009
+ await this.hideLoading();
1010
+ if (!response.error) {
1011
+ // Validación exitosa
1012
+ this.validationService.updateValidationStep('validateFace', true);
1013
+ if (this.simpleProcess) {
1014
+ // Para simpleProcess, cerrar automáticamente
1015
+ await this.handleExitWithResult(true, 'facial-validation-success');
1016
+ }
1017
+ else {
1018
+ // Para proceso normal, mover al siguiente paso
1019
+ this.moveToNextStep(6);
1020
+ }
1021
+ }
1022
+ else {
1023
+ // Error en la validación
1024
+ this.validationService.updateValidationStep('validateFace', false);
1025
+ await this.showAlert('Error', 'La validación facial no fue exitosa. Por favor intenta nuevamente.', []);
1026
+ if (this.simpleProcess) {
1027
+ await this.handleExitWithResult(false, 'facial-validation-error');
1028
+ }
1029
+ }
1030
+ },
1031
+ error: async (error) => {
1032
+ console.error('❌ Error en validación facial:', error);
1033
+ await this.hideLoading();
1034
+ this.validationService.updateValidationStep('validateFace', false);
1035
+ await this.showAlert('Error', 'Ocurrió un error durante la validación facial.', []);
1036
+ if (this.simpleProcess) {
1037
+ await this.handleExitWithResult(false, 'facial-validation-exception');
1038
+ }
1039
+ }
1040
+ });
1041
+ }
1042
+ catch (error) {
1043
+ console.error('❌ Error procesando validación facial:', error);
1044
+ await this.hideLoading();
1045
+ }
1046
+ }
1046
1047
  // Modal handling methods
1047
1048
  setupModalSubscriptions() {
1048
1049
  this.modalDpiServices.closeOverlay$.subscribe(() => {
@@ -1204,47 +1205,6 @@ export class IdVisionComponent {
1204
1205
  });
1205
1206
  await modal.present();
1206
1207
  }
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
1208
  async openAcuerdoVideo() {
1249
1209
  // Cerrar cualquier loading antes de abrir la modal
1250
1210
  await this.hideLoading();
@@ -1294,25 +1254,12 @@ export class IdVisionComponent {
1294
1254
  });
1295
1255
  await modal.present();
1296
1256
  }
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
1257
  async getBackModal(file) {
1308
1258
  if (!file || file.size === 0) {
1309
1259
  return;
1310
1260
  }
1311
1261
  await this.VideoSelfieProcccess(file);
1312
1262
  }
1313
- async convertImagePathToFile(imagePath, fileName) {
1314
- return await this.processingService.convertImagePathToFile(imagePath, fileName);
1315
- }
1316
1263
  // Utility methods
1317
1264
  async showAlert(header, message, details, onConfirm) {
1318
1265
  const detailsMessage = Array.isArray(details)
@@ -1352,7 +1299,192 @@ export class IdVisionComponent {
1352
1299
  });
1353
1300
  await toast.present();
1354
1301
  }
1355
- 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)); }; }
1302
+ onSlideChange() {
1303
+ const currentIndex = this.swiperContainerRef?.nativeElement?.swiper?.activeIndex;
1304
+ console.log('📍 Slide actual:', currentIndex);
1305
+ if (currentIndex === 2) {
1306
+ this.flip = true;
1307
+ setTimeout(() => {
1308
+ this.waitFlip = false;
1309
+ }, 1500);
1310
+ }
1311
+ // Ejecutar automáticamente la acción del paso actual si es tipo 6 (validación facial)
1312
+ // El índice 0 es el slide inicial, los pasos empiezan desde índice 1
1313
+ if (currentIndex && currentIndex > 0 && this.validationConfig) {
1314
+ const stepIndex = currentIndex - 1; // Ajustar porque slide 0 es inicial
1315
+ // Verificar que el índice esté dentro del rango válido
1316
+ if (stepIndex >= 0 && stepIndex < this.validationConfig.length) {
1317
+ const currentStep = this.validationConfig[stepIndex];
1318
+ console.log(`📋 Step en índice ${stepIndex}:`, {
1319
+ type: currentStep?.type,
1320
+ id: currentStep?.id,
1321
+ order: currentStep?.order
1322
+ });
1323
+ // Ejecutar automáticamente si es tipo 6 (validación facial)
1324
+ if (currentStep && currentStep.type === 6) {
1325
+ console.log('🎯 Detectado tipo 6 - Ejecutando validación facial automáticamente');
1326
+ // Pequeño delay para que el slide se renderice completamente
1327
+ setTimeout(() => {
1328
+ if (currentStep.action) {
1329
+ currentStep.action();
1330
+ }
1331
+ else {
1332
+ console.error('❌ No se encontró action para el step tipo 6');
1333
+ }
1334
+ }, 500);
1335
+ }
1336
+ }
1337
+ else {
1338
+ console.warn(`⚠️ Índice ${stepIndex} fuera de rango. validationConfig.length: ${this.validationConfig.length}`);
1339
+ }
1340
+ }
1341
+ }
1342
+ animationProgress() {
1343
+ const interval = setInterval(() => {
1344
+ this.progress += 0.02;
1345
+ if (this.progress >= 1) {
1346
+ this.progress = 1;
1347
+ clearInterval(interval);
1348
+ }
1349
+ }, 100);
1350
+ }
1351
+ startAnimations() {
1352
+ this.animationType('assets/imagesIdvision/face_scanning.json');
1353
+ this.animationProgress();
1354
+ this.animationText();
1355
+ }
1356
+ animationText() {
1357
+ this.showText = false;
1358
+ setTimeout(() => {
1359
+ this.showText = true;
1360
+ if (this.index >= this.texts.length) {
1361
+ if (this.comparsionStatus === 'success') {
1362
+ this.currentText = this.successText;
1363
+ this.animationType('assets/imagesIdvision/success.json', false);
1364
+ }
1365
+ else {
1366
+ this.currentText = this.errorText;
1367
+ this.animationType('assets/imagesIdvision/error.json', false);
1368
+ }
1369
+ return;
1370
+ }
1371
+ this.currentText = this.texts[this.index];
1372
+ this.index++;
1373
+ setTimeout(() => this.animationText(), 2000);
1374
+ }, 300);
1375
+ }
1376
+ openFacialValidation() {
1377
+ this.startAnimations();
1378
+ const payload = {
1379
+ endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
1380
+ headers: {
1381
+ apiKey: this.apikey,
1382
+ connectionMg: this.connection
1383
+ },
1384
+ body: {
1385
+ codigo: localStorage.getItem('codigo') ?? '',
1386
+ identificadorAnt: this.dpiCodeSecond
1387
+ }
1388
+ };
1389
+ this.comparsion(payload);
1390
+ }
1391
+ animationType(path, loop = true) {
1392
+ lottie.destroy();
1393
+ const container = this.elementRef.nativeElement.querySelector('.lottie-container');
1394
+ console.log('container:', container);
1395
+ if (!container) {
1396
+ console.log('No se encontró el contenedor Lottie');
1397
+ return;
1398
+ }
1399
+ lottie.loadAnimation({
1400
+ container: container,
1401
+ renderer: 'svg',
1402
+ loop,
1403
+ autoplay: true,
1404
+ path
1405
+ });
1406
+ }
1407
+ comparsion(payload) {
1408
+ this.dpiService.comparison(payload).subscribe({
1409
+ next: async (response) => {
1410
+ console.log('Respuesta de validación facial:', response);
1411
+ if (!response.error) {
1412
+ this.actionSuccess();
1413
+ return;
1414
+ }
1415
+ this.actionError();
1416
+ },
1417
+ error: async (error) => {
1418
+ console.error('Error en validación facial:', error);
1419
+ this.actionError();
1420
+ }
1421
+ });
1422
+ }
1423
+ actionSuccess() {
1424
+ this.comparsionStatus = 'success';
1425
+ this.validationService.updateValidationStep('validateFace', true);
1426
+ }
1427
+ actionError() {
1428
+ this.comparsionStatus = 'error';
1429
+ this.validationService.updateValidationStep('validateFace', false);
1430
+ }
1431
+ finalizar() {
1432
+ this.navigationService.navigateToCompletion();
1433
+ }
1434
+ async openAcuerdoVideoNew() {
1435
+ // Cerrar cualquier loading antes de abrir la modal
1436
+ await this.hideLoading();
1437
+ const modal = await this.modalController.create({
1438
+ component: AcuerdoVideoPage,
1439
+ componentProps: {
1440
+ backFunction: async (file) => {
1441
+ await this.getAcuerdoVideo(file);
1442
+ },
1443
+ closeRequested: async () => {
1444
+ await modal.dismiss();
1445
+ await this.handleExitWithResult(false, 'acuerdo-video-close');
1446
+ },
1447
+ },
1448
+ backdropDismiss: false,
1449
+ animated: !this.simpleProcess
1450
+ });
1451
+ await modal.present();
1452
+ }
1453
+ async handleInitSecurityExit() {
1454
+ await this.handleExitWithResult(false, 'init-camera-security-block');
1455
+ }
1456
+ async evaluateInitialCameraSecurity() {
1457
+ const detection = await this.virtualCameraDetectionService.detectSuspiciousVideoInputs();
1458
+ if (!detection.blocked)
1459
+ return true;
1460
+ this.isInitCameraBlocked = true;
1461
+ this.initCameraBlockReason = detection.reason;
1462
+ this.cdRef.detectChanges();
1463
+ return false;
1464
+ }
1465
+ async logAvailableVideoInputsOnInit() {
1466
+ if (!navigator?.mediaDevices?.enumerateDevices) {
1467
+ console.warn('[mediaDevices] enumerateDevices no está disponible en este entorno.');
1468
+ return;
1469
+ }
1470
+ try {
1471
+ const devices = await navigator.mediaDevices.enumerateDevices();
1472
+ const videoInputs = devices.filter((device) => device.kind === 'videoinput');
1473
+ if (!videoInputs.length) {
1474
+ console.warn('No se detectaron cámaras (videoinput).');
1475
+ return;
1476
+ }
1477
+ console.log(`Cámaras detectadas: ${videoInputs.length}`);
1478
+ videoInputs.forEach((camera, index) => {
1479
+ const safeLabel = camera.label?.trim() ? camera.label : '(sin label, falta permiso de cámara)';
1480
+ console.log(`[Camara] #${index + 1} label="${safeLabel}" deviceId="${camera.deviceId}" groupId="${camera.groupId || '-'}"`);
1481
+ });
1482
+ }
1483
+ catch (error) {
1484
+ console.error('[Camara] Error al enumerar cámaras:', error);
1485
+ }
1486
+ }
1487
+ 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
1488
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IdVisionComponent, selectors: [["app-id-vision"]], viewQuery: function IdVisionComponent_Query(rf, ctx) { if (rf & 1) {
1357
1489
  i0.ɵɵviewQuery(_c0, 5);
1358
1490
  i0.ɵɵviewQuery(_c1, 5, ElementRef);
@@ -1360,25 +1492,28 @@ export class IdVisionComponent {
1360
1492
  let _t;
1361
1493
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dpi = _t.first);
1362
1494
  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: 15, vars: 8, consts: [["swiperContainer", ""], ["dpi", ""], ["init", "false", "class", "custom-swiper", 4, "ngIf"], [1, "version"], ["vertical", "top", "horizontal", "end", "slot", "fixed", 4, "ngIf"], [1, "wrapper-no-internet"], [1, "content-no-internet"], [1, "title-no-internet"], ["src", "assets/imagesIdvision/no-internet.svg", "alt", "Error conexi\u00F3n img", 1, "icon-no-internet"], [1, "description-no-internet"], ["init", "false", 1, "custom-swiper"], [4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "confirmation-screen"], ["class", "font-confirmation", 4, "ngIf"], [1, "image-confirmation"], ["src", "assets/imagesIdvision/blue-check.png", "alt", "Check morado"], [1, "button-container"], ["expand", "block", 1, "custom-button", 3, "click"], [1, "content"], [1, "head"], [1, "h-title"], [1, "p-justify", "p-margin"], [1, "rounded-input"], ["type", "number", "disabled", "true", "placeholder", "Digita tu n\u00FAmero de DPI"], [1, "verify-container"], [1, "image-container"], ["src", "assets/imagesIdvision/documentsImage.png", "alt", ""], [1, "container-text"], [1, "p-justify"], ["src", "assets/imagesIdvision/rostroImage.png", "alt", ""], [1, "fixed-footer"], [1, "content", 3, "ngClass", "ngSwitch"], [3, "ngClass", 4, "ngSwitchCase"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [3, "ngClass"], ["src", "assets/imagesIdvision/Foco.png", "alt", ""], [1, "p-center", "p-info", "p-margin"], [1, "dpi-container"], ["src", "assets/imagesIdvision/dpi-front-1.png", "alt", ""], ["src", "assets/imagesIdvision/dpi-back-1.png", "alt", ""], [1, "font-confirmation"], ["vertical", "top", "horizontal", "end", "slot", "fixed"], [1, "button-debug", 3, "click"], ["name", "bug-outline"]], template: function IdVisionComponent_Template(rf, ctx) { if (rf & 1) {
1364
- i0.ɵɵelementStart(0, "ion-content");
1365
- i0.ɵɵtemplate(1, IdVisionComponent_swiper_container_1_Template, 13, 4, "swiper-container", 2);
1366
- i0.ɵɵelementStart(2, "div", 3);
1367
- i0.ɵɵtext(3);
1495
+ } }, 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", "Error 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) {
1496
+ i0.ɵɵtemplate(0, IdVisionComponent_ion_content_0_Template, 2, 4, "ion-content", 2);
1497
+ i0.ɵɵelementStart(1, "ion-content", 3);
1498
+ i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_2_Template, 12, 4, "swiper-container", 4);
1499
+ i0.ɵɵelementStart(3, "div", 5);
1500
+ i0.ɵɵtext(4);
1368
1501
  i0.ɵɵelementEnd();
1369
- i0.ɵɵtemplate(4, IdVisionComponent_ion_fab_4_Template, 3, 0, "ion-fab", 4);
1502
+ i0.ɵɵtemplate(5, IdVisionComponent_ion_fab_5_Template, 3, 0, "ion-fab", 6);
1370
1503
  i0.ɵɵelementEnd();
1371
- i0.ɵɵelementStart(5, "ion-content")(6, "div", 5)(7, "div", 6)(8, "h2", 7);
1372
- i0.ɵɵtext(9, "Error de conexi\u00F3n");
1504
+ i0.ɵɵelementStart(6, "ion-content")(7, "div", 7)(8, "div", 8)(9, "h2", 9);
1505
+ i0.ɵɵtext(10, "Error de conexi\u00F3n");
1373
1506
  i0.ɵɵelementEnd();
1374
- i0.ɵɵelement(10, "img", 8);
1375
- i0.ɵɵelementStart(11, "p", 9);
1376
- i0.ɵɵtext(12, " No pudimos cargar la p\u00E1gina. ");
1377
- i0.ɵɵelement(13, "br");
1378
- i0.ɵɵtext(14, " Verifica tu internet y prueba de nuevo. ");
1507
+ i0.ɵɵelement(11, "img", 10);
1508
+ i0.ɵɵelementStart(12, "p", 11);
1509
+ i0.ɵɵtext(13, " No pudimos cargar la p\u00E1gina. ");
1510
+ i0.ɵɵelement(14, "br");
1511
+ i0.ɵɵtext(15, " Verifica tu internet y prueba de nuevo. ");
1379
1512
  i0.ɵɵelementEnd()()()();
1380
1513
  } if (rf & 2) {
1381
- i0.ɵɵstyleProp("display", ctx.hasInternet ? "block" : "none");
1514
+ i0.ɵɵproperty("ngIf", ctx.isInitCameraBlocked);
1515
+ i0.ɵɵadvance();
1516
+ i0.ɵɵstyleProp("display", ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
1382
1517
  i0.ɵɵadvance();
1383
1518
  i0.ɵɵproperty("ngIf", !ctx.simpleProcess);
1384
1519
  i0.ɵɵadvance(2);
@@ -1386,13 +1521,13 @@ export class IdVisionComponent {
1386
1521
  i0.ɵɵadvance();
1387
1522
  i0.ɵɵproperty("ngIf", ctx.showDebug);
1388
1523
  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 }); }
1524
+ i0.ɵɵstyleProp("display", !ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
1525
+ } }, 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}\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
1526
  }
1392
1527
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IdVisionComponent, [{
1393
1528
  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: [{
1529
+ 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\">Ocurri\u00F3 un error al 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\">Error de conexi\u00F3n</h2>\n <img src=\"assets/imagesIdvision/no-internet.svg\" alt=\"Error 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}\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"] }]
1530
+ }], () => [{ 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
1531
  type: ViewChild,
1397
1532
  args: ['dpi', { static: false }]
1398
1533
  }], swiperContainerRef: [{
@@ -1402,6 +1537,8 @@ export class IdVisionComponent {
1402
1537
  type: Input
1403
1538
  }], dpiCode: [{
1404
1539
  type: Input
1540
+ }], dpiCodeSecond: [{
1541
+ type: Input
1405
1542
  }], connection: [{
1406
1543
  type: Input
1407
1544
  }], apikey: [{
@@ -1411,5 +1548,5 @@ export class IdVisionComponent {
1411
1548
  }], validationConfig: [{
1412
1549
  type: Input
1413
1550
  }] }); })();
1414
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent", filePath: "src\\app\\pages\\id-vision\\id-vision.component.ts", lineNumber: 55 }); })();
1551
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent" }); })();
1415
1552
  //# sourceMappingURL=id-vision.component.js.map