metag-sdk-ionic 1.2.11 → 1.3.0-gforms

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +34 -33
  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 +5 -5
  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 +64 -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 +556 -417
  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 +167 -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 +79 -50
  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);
203
- i0.ɵɵtext(2, "Ocurri\u00F3 un error al procesar la informaci\u00F3n");
265
+ function IdVisionComponent_swiper_container_2_div_7_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
267
+ i0.ɵɵtext(2, "No se pudo procesar la informaci\u00F3n");
204
268
  i0.ɵɵelementEnd()();
205
269
  } }
206
- function 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
@@ -339,58 +419,19 @@ export class IdVisionComponent {
339
419
  }
340
420
  else {
341
421
  await this.hideLoading();
342
- alert('Error en opción de ambiente');
422
+ //alert('Error en opción de ambiente');
343
423
  }
344
- // if (this.simpleProcess) {
345
- // // Para simpleProcess, mostrar loading nativo de Ionic
346
- // await this.showLoading();
347
- // if (!this.configEnv.error) {
348
- // this.setupModalSubscriptions();
349
- // await this.InitProccess();
350
- // // Configuración rápida para simpleProcess
351
- // await this.loadSimpleProcessConfig();
352
- // await this.hideLoading();
353
- // await this.openPhotoSelfie();
354
- // } else {
355
- // alert('Error en opción de ambiente');
356
- // }
357
- // } else {
358
- // if (!this.configEnv.error) {
359
- // await this.loadMockValidationConfig();
360
- // // Obtener versión del SDK
361
- // if (this.isAndroid || this.isIOS) {
362
- // const info = await App.getInfo();
363
- // this.versionSDK = info.version;
364
- // } else {
365
- // this.versionSDK = 'web';
366
- // }
367
- // this.setupModalSubscriptions();
368
- // } else {
369
- // alert('Error en opción de ambiente');
370
- // }
371
- // }
372
424
  }
373
425
  catch (error) {
374
426
  await this.hideLoading();
375
- console.error('Error en inicialización:', error);
427
+ console.log('Error en inicialización:', error);
376
428
  }
377
429
  }
378
430
  ngAfterViewInit() {
379
- console.log('🟢 [Component] ngAfterViewInit() llamado');
380
- console.log('🟢 [Component] simpleProcess:', this.simpleProcess);
381
- console.log('🟢 [Component] swiperContainerRef:', this.swiperContainerRef);
382
- console.log('🟢 [Component] swiperContainerRef?.nativeElement:', this.swiperContainerRef?.nativeElement);
383
- // Solo inicializar si el swiper está en el DOM
384
431
  if (this.swiperContainerRef && !this.simpleProcess) {
385
- console.log('✅ [Component] Condiciones cumplidas, inicializando Swiper...');
386
- console.log('✅ [Component] Pasando elemento al servicio:', this.swiperContainerRef.nativeElement);
387
432
  this.navigationService.initializeSwiper(this.swiperContainerRef.nativeElement);
388
433
  this.swiperElement.set(this.navigationService.getSwiperRef());
389
434
  }
390
- else {
391
- console.warn('⚠️ [Component] SwiperContainer no está disponible en ngAfterViewInit');
392
- console.warn('⚠️ [Component] Razón: swiperContainerRef =', !!this.swiperContainerRef, ', simpleProcess =', this.simpleProcess);
393
- }
394
435
  if (this.dpi) {
395
436
  this.dpi.value = this.dpiCode ?? '';
396
437
  }
@@ -403,78 +444,6 @@ export class IdVisionComponent {
403
444
  // Rehabilitar el botón de atrás al salir del componente
404
445
  this.enableBackButton();
405
446
  }
406
- // Handler para cancelar el proceso completamente
407
- handleCancelProcess() {
408
- try {
409
- console.log('🔄 Usuario canceló el proceso');
410
- // IMPORTANTE: Deshabilitar listeners del botón de atrás
411
- this.enableBackButton();
412
- console.log('✅ Listeners del botón de atrás deshabilitados');
413
- // Limpiar cualquier loader activo
414
- this.dpiService.forceCloseAllLoaders();
415
- // Emitir resultado falso al SDK
416
- this.sdkCommunicationService.emitExit(false);
417
- console.log('✅ Resultado false enviado al SDK padre');
418
- console.log('⚠️ La app padre debe manejar el cierre del componente <app-id-vision>');
419
- }
420
- catch (error) {
421
- console.error('❌ Error al cancelar proceso:', error);
422
- // Intentar emitir de todos modos
423
- try {
424
- this.sdkCommunicationService.emitExit(false);
425
- }
426
- catch (e) {
427
- console.error('❌ No se pudo emitir resultado:', e);
428
- }
429
- }
430
- }
431
- // Método para mostrar modal de confirmación de cancelación
432
- async showCancelConfirmationModal() {
433
- const alert = await this.alertController.create({
434
- header: 'Cancelar proceso',
435
- message: '¿Estás seguro que deseas cancelar el proceso de validación?',
436
- backdropDismiss: false,
437
- buttons: [
438
- {
439
- text: 'No, continuar',
440
- role: 'cancel',
441
- cssClass: 'alert-button-cancel'
442
- },
443
- {
444
- text: 'Sí, cancelar',
445
- role: 'confirm',
446
- cssClass: 'alert-button-confirm'
447
- }
448
- ]
449
- });
450
- await alert.present();
451
- const { role } = await alert.onDidDismiss();
452
- if (role === 'confirm') {
453
- console.log('🚪 Usuario confirmó cancelación del proceso');
454
- return true;
455
- }
456
- else {
457
- console.log('🔄 Usuario decidió continuar con el proceso');
458
- return false;
459
- }
460
- }
461
- // Método para deshabilitar el botón de atrás en simpleProcess
462
- disableBackButton() {
463
- // Evitar duplicación de listeners
464
- if (this.backButtonListenerActive) {
465
- console.log('⚠️ Back button listeners ya están activos');
466
- return;
467
- }
468
- console.log('🔒 Deshabilitando botón de atrás');
469
- if (this.platform.is('android')) {
470
- // Para Android, interceptar el botón de atrás físico
471
- // document.addEventListener('backbutton', this.boundOnBackButton, false);
472
- }
473
- // Para todas las plataformas, interceptar la navegación del navegador
474
- window.addEventListener('beforeunload', this.boundOnBeforeUnload);
475
- window.addEventListener('popstate', this.boundOnPopState);
476
- this.backButtonListenerActive = true;
477
- }
478
447
  // Método para rehabilitar el botón de atrás
479
448
  enableBackButton() {
480
449
  if (!this.backButtonListenerActive) {
@@ -489,22 +458,6 @@ export class IdVisionComponent {
489
458
  window.removeEventListener('popstate', this.boundOnPopState);
490
459
  this.backButtonListenerActive = false;
491
460
  }
492
- // Handler para el botón de atrás en Android
493
- // private async onBackButton(event: Event): Promise<void> {
494
- // console.log('� Botón de atrás presionado');
495
- // event.preventDefault();
496
- // event.stopPropagation();
497
- // // Mostrar modal de confirmación
498
- // const shouldCancel = await this.showCancelConfirmationModal();
499
- // if (shouldCancel) {
500
- // // Usuario confirmó la cancelación
501
- // console.log('❌ Proceso cancelado por el usuario');
502
- // this.handleCancelProcess();
503
- // } else {
504
- // // Usuario decidió continuar
505
- // console.log('✅ Usuario decidió continuar');
506
- // }
507
- // }
508
461
  // Handler para beforeunload
509
462
  onBeforeUnload(event) {
510
463
  console.log('🚫 Navegación bloqueada en simpleProcess');
@@ -575,7 +528,7 @@ export class IdVisionComponent {
575
528
  }
576
529
  // Forzar cierre de TODOS los loadings que puedan estar activos
577
530
  let attempts = 0;
578
- const maxAttempts = 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) {
@@ -835,11 +770,18 @@ export class IdVisionComponent {
835
770
  }
836
771
  }
837
772
  else {
838
- this.handleInitProcessError(response.message || 'Error desconocido');
773
+ const isUndefinedError = (response.message ?? '').toLowerCase().includes("cannot read properties of undefined (reading '0')");
774
+ if (isUndefinedError) {
775
+ await this.handleExitWithResult(false, 'init-process-error');
776
+ return;
777
+ }
778
+ this.handleInitProcessError(response.message || 'Intente nuevamente.');
839
779
  }
840
780
  }
841
781
  catch (error) {
842
- console.error('Error en InitProcess:', error);
782
+ console.log('Error en InitProcess:', error);
783
+ //this.handleInitProcessError('Intente nuevamente.');
784
+ await this.handleExitWithResult(false, 'init-process-error');
843
785
  }
844
786
  }
845
787
  executeFirstAvailableAction() {
@@ -867,31 +809,37 @@ export class IdVisionComponent {
867
809
  }
868
810
  getValidationKeyForType(type) {
869
811
  switch (type) {
870
- case 1: 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;
812
+ case 1:
813
+ return 'acuerdoVideo';
814
+ case 2:
815
+ return 'dpiFront';
816
+ case 3:
817
+ return 'dpiBack';
818
+ case 4:
819
+ return 'videoSelfie';
820
+ case 5:
821
+ return 'photoSelfie';
822
+ case 6:
823
+ return 'validateFace';
824
+ default:
825
+ return null;
876
826
  }
877
827
  }
878
- handleInitProcessError(message) {
879
- const dpiValue = this.dpi.value ?? '';
828
+ async handleInitProcessError(message) {
829
+ const dpiValue = this.dpiCode ?? '';
880
830
  if (!dpiValue || dpiValue.trim().length === 0) {
881
- this.showAlert('Error', 'El campo DPI no puede estar vacío', []);
831
+ this.showAlert('¡Lo sentimos!', 'El campo DPI no puede estar vacío', []);
882
832
  }
883
833
  else if (dpiValue.length > 12) {
884
- this.showAlert('Error', message, []);
834
+ this.showAlert('¡Lo sentimos!', message, []);
885
835
  }
886
836
  else {
887
- this.showAlert('Error', message, []);
837
+ this.showAlert('¡Lo sentimos!', message, []);
888
838
  }
839
+ await this.handleExitWithResult(false, 'init-process-error');
889
840
  }
890
841
  // DPI Processing methods
891
842
  async DpiFrontProccess(filePath) {
892
- // Debug: Verificar que configEnv tenga la URL correcta
893
- console.log('🔍 DpiFrontProccess - configEnv:', this.configEnv);
894
- console.log('🔍 DpiFrontProccess - URL endpoint:', this.configEnv?.env_endpoint);
895
843
  try {
896
844
  // El loading se maneja completamente dentro del ProcessingService
897
845
  const result = await this.processingService.processFrontDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
@@ -915,9 +863,6 @@ export class IdVisionComponent {
915
863
  }
916
864
  }
917
865
  async DpiBackProccess(filePath) {
918
- // Debug: Verificar que configEnv tenga la URL correcta
919
- console.log('🔍 DpiBackProccess - configEnv:', this.configEnv);
920
- console.log('🔍 DpiBackProccess - URL endpoint:', this.configEnv?.env_endpoint);
921
866
  try {
922
867
  // El loading se maneja completamente dentro del ProcessingService
923
868
  const result = await this.processingService.processBackDPI(filePath, this.connection, this.apikey, this.configEnv, this.hasInternet);
@@ -965,12 +910,6 @@ export class IdVisionComponent {
965
910
  }
966
911
  else {
967
912
  this.validationService.updateValidationStep('videoSelfie', false);
968
- // if (result.shouldResumeCamera) {
969
- // this.closeModalVideoSelfie();
970
- // } else {
971
- // this.sdkCommunicationService.emitExit(false);
972
- // this.navController.back();
973
- // }
974
913
  this.closeModalVideoSelfie();
975
914
  }
976
915
  }
@@ -980,11 +919,6 @@ export class IdVisionComponent {
980
919
  }
981
920
  // Photo Selfie Processing
982
921
  async photoVideoSelfieFile(filePath) {
983
- console.log('🔄 Iniciando procesamiento de foto selfie...');
984
- // Debug: Verificar que configEnv tenga la URL correcta
985
- console.log('🔍 photoVideoSelfieFile - configEnv:', this.configEnv);
986
- console.log('🔍 photoVideoSelfieFile - URL endpoint:', this.configEnv?.env_endpoint);
987
- console.log('🔍 photoVideoSelfieFile - simpleProcess:', this.simpleProcess);
988
922
  try {
989
923
  // El loading se maneja completamente dentro del ProcessingService
990
924
  const result = await this.processingService.processPhotoSelfie(filePath, this.connection, this.apikey, this.configEnv, this.simpleProcess, // Pasar flag de proceso simple
@@ -1023,17 +957,17 @@ export class IdVisionComponent {
1023
957
  // Acuerdo Video Processing
1024
958
  async getAcuerdoVideo(file) {
1025
959
  try {
1026
- const result = await this.processingService.processAcuerdoVideo(file);
960
+ const result = await this.processingService.processAcuerdoVideo(this.connection, this.apikey, this.configEnv, file);
1027
961
  if (result.success) {
1028
962
  this.closeModalAcuerdoVideo();
1029
963
  this.modalController.dismiss();
1030
964
  this.validationService.updateValidationStep('acuerdoVideo', true);
1031
- if (this.simpleProcess) {
1032
- this.executeNextActionForSimpleProcess(1);
1033
- }
1034
- else {
1035
- this.moveToNextStep(1);
1036
- }
965
+ await this.handleExitWithResult(true, 'acuerdo-video-close');
966
+ /*if (this.simpleProcess) {
967
+ //this.executeNextActionForSimpleProcess(1);
968
+ } else {
969
+ this.moveToNextStep(0);
970
+ }*/
1037
971
  }
1038
972
  else {
1039
973
  this.validationService.updateValidationStep('acuerdoVideo', false);
@@ -1043,6 +977,75 @@ export class IdVisionComponent {
1043
977
  console.error('Error processing acuerdo video:', error);
1044
978
  }
1045
979
  }
980
+ // Facial Validation Processing
981
+ async openFacialValidation2() {
982
+ console.log('🎯 Iniciando validación facial automática...');
983
+ // Ejecutar directamente el proceso sin modal (es automático)
984
+ await this.processFacialValidation();
985
+ }
986
+ async processFacialValidation() {
987
+ console.log('🔍 processFacialValidation - iniciando...');
988
+ try {
989
+ // Mostrar loading con animación
990
+ await this.showLoading('Validando rostro...');
991
+ // Iniciar animación y progreso
992
+ setTimeout(() => {
993
+ //this.startScanAnimation();
994
+ }, 300);
995
+ // Preparar el payload
996
+ const payload = {
997
+ endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
998
+ headers: {
999
+ apiKey: this.apikey,
1000
+ connectionMg: this.connection
1001
+ },
1002
+ body: {
1003
+ codigo: localStorage.getItem('codigo') ?? '',
1004
+ identificadorAnt: this.dpiCodeSecond
1005
+ }
1006
+ };
1007
+ // Llamar al servicio
1008
+ this.dpiService.comparison(payload).subscribe({
1009
+ next: async (response) => {
1010
+ console.log('✅ Respuesta de validación facial:', response);
1011
+ await this.hideLoading();
1012
+ if (!response.error) {
1013
+ // Validación exitosa
1014
+ this.validationService.updateValidationStep('validateFace', true);
1015
+ if (this.simpleProcess) {
1016
+ // Para simpleProcess, cerrar automáticamente
1017
+ await this.handleExitWithResult(true, 'facial-validation-success');
1018
+ }
1019
+ else {
1020
+ // Para proceso normal, mover al siguiente paso
1021
+ this.moveToNextStep(6);
1022
+ }
1023
+ }
1024
+ else {
1025
+ // Error en la validación
1026
+ this.validationService.updateValidationStep('validateFace', false);
1027
+ await this.showAlert('¡Lo sentimos!', 'La validación facial no fue exitosa. Por favor intenta nuevamente.', []);
1028
+ if (this.simpleProcess) {
1029
+ await this.handleExitWithResult(false, 'facial-validation-error');
1030
+ }
1031
+ }
1032
+ },
1033
+ error: async (error) => {
1034
+ console.error('❌ Error en validación facial:', error);
1035
+ await this.hideLoading();
1036
+ this.validationService.updateValidationStep('validateFace', false);
1037
+ await this.showAlert('¡Lo sentimos!', 'Ocurrió un error durante la validación facial.', []);
1038
+ if (this.simpleProcess) {
1039
+ await this.handleExitWithResult(false, 'facial-validation-exception');
1040
+ }
1041
+ }
1042
+ });
1043
+ }
1044
+ catch (error) {
1045
+ console.error('❌ Error procesando validación facial:', error);
1046
+ await this.hideLoading();
1047
+ }
1048
+ }
1046
1049
  // Modal handling methods
1047
1050
  setupModalSubscriptions() {
1048
1051
  this.modalDpiServices.closeOverlay$.subscribe(() => {
@@ -1204,47 +1207,6 @@ export class IdVisionComponent {
1204
1207
  });
1205
1208
  await modal.present();
1206
1209
  }
1207
- async openDirectPhotoSelfie() {
1208
- console.log('🎬 Abriendo DirectPhotoSelfie modal...');
1209
- // Cerrar cualquier loading antes de abrir la modal
1210
- await this.hideLoading();
1211
- const closeRequestedCallback = async () => {
1212
- console.log('═══════════════════════════════════════════════════════');
1213
- console.log('🚪 Callback closeRequested invocado en id-vision');
1214
- console.log('═══════════════════════════════════════════════════════');
1215
- if (this.simpleProcess) {
1216
- console.log('🚪 Usuario cerró direct-photo-selfie - cerrando modal y emitiendo resultado');
1217
- // Cerrar el modal primero
1218
- await modal.dismiss();
1219
- console.log('✅ Modal cerrado desde padre');
1220
- // Ejecutar handleExitWithResult que emite el resultado
1221
- // La app padre recibirá onExit$ y hará showSDK = false
1222
- await this.handleExitWithResult(false, 'direct-photo-selfie-close');
1223
- }
1224
- else {
1225
- // Para proceso normal, cerrar modal y limpiar
1226
- await modal.dismiss();
1227
- this.closeModalOverlay();
1228
- }
1229
- };
1230
- console.log('📦 Creando modal con props...');
1231
- console.log('📦 closeRequested callback definido:', !!closeRequestedCallback);
1232
- const modal = await this.modalController.create({
1233
- component: DirectPhotoSelfieComponent,
1234
- componentProps: {
1235
- onTakePicture: async (file) => {
1236
- await this.photoVideoSelfieFile(file);
1237
- },
1238
- closeRequested: closeRequestedCallback,
1239
- },
1240
- backdropDismiss: false,
1241
- // Optimización: sin animación para simpleProcess
1242
- animated: !this.simpleProcess
1243
- });
1244
- console.log('✅ Modal creado, presentando...');
1245
- await modal.present();
1246
- console.log('✅ Modal presentado correctamente');
1247
- }
1248
1210
  async openAcuerdoVideo() {
1249
1211
  // Cerrar cualquier loading antes de abrir la modal
1250
1212
  await this.hideLoading();
@@ -1294,25 +1256,12 @@ export class IdVisionComponent {
1294
1256
  });
1295
1257
  await modal.present();
1296
1258
  }
1297
- // Legacy validation methods (kept for compatibility)
1298
- async validateDPIFront(filePath) {
1299
- await this.DpiFrontProccess(filePath);
1300
- return true;
1301
- }
1302
- async validateDPIBack(filePath) {
1303
- this.modalController.dismiss();
1304
- await this.DpiBackProccess(filePath);
1305
- return true;
1306
- }
1307
1259
  async getBackModal(file) {
1308
1260
  if (!file || file.size === 0) {
1309
1261
  return;
1310
1262
  }
1311
1263
  await this.VideoSelfieProcccess(file);
1312
1264
  }
1313
- async convertImagePathToFile(imagePath, fileName) {
1314
- return await this.processingService.convertImagePathToFile(imagePath, fileName);
1315
- }
1316
1265
  // Utility methods
1317
1266
  async showAlert(header, message, details, onConfirm) {
1318
1267
  const detailsMessage = Array.isArray(details)
@@ -1352,7 +1301,192 @@ export class IdVisionComponent {
1352
1301
  });
1353
1302
  await toast.present();
1354
1303
  }
1355
- 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)); }; }
1304
+ onSlideChange() {
1305
+ const currentIndex = this.swiperContainerRef?.nativeElement?.swiper?.activeIndex;
1306
+ console.log('📍 Slide actual:', currentIndex);
1307
+ if (currentIndex === 2) {
1308
+ this.flip = true;
1309
+ setTimeout(() => {
1310
+ this.waitFlip = false;
1311
+ }, 1500);
1312
+ }
1313
+ // Ejecutar automáticamente la acción del paso actual si es tipo 6 (validación facial)
1314
+ // El índice 0 es el slide inicial, los pasos empiezan desde índice 1
1315
+ if (currentIndex && currentIndex > 0 && this.validationConfig) {
1316
+ const stepIndex = currentIndex - 1; // Ajustar porque slide 0 es inicial
1317
+ // Verificar que el índice esté dentro del rango válido
1318
+ if (stepIndex >= 0 && stepIndex < this.validationConfig.length) {
1319
+ const currentStep = this.validationConfig[stepIndex];
1320
+ console.log(`📋 Step en índice ${stepIndex}:`, {
1321
+ type: currentStep?.type,
1322
+ id: currentStep?.id,
1323
+ order: currentStep?.order
1324
+ });
1325
+ // Ejecutar automáticamente si es tipo 6 (validación facial)
1326
+ if (currentStep && currentStep.type === 6) {
1327
+ console.log('🎯 Detectado tipo 6 - Ejecutando validación facial automáticamente');
1328
+ // Pequeño delay para que el slide se renderice completamente
1329
+ setTimeout(() => {
1330
+ if (currentStep.action) {
1331
+ currentStep.action();
1332
+ }
1333
+ else {
1334
+ console.error('❌ No se encontró action para el step tipo 6');
1335
+ }
1336
+ }, 500);
1337
+ }
1338
+ }
1339
+ else {
1340
+ console.warn(`⚠️ Índice ${stepIndex} fuera de rango. validationConfig.length: ${this.validationConfig.length}`);
1341
+ }
1342
+ }
1343
+ }
1344
+ animationProgress() {
1345
+ const interval = setInterval(() => {
1346
+ this.progress += 0.02;
1347
+ if (this.progress >= 1) {
1348
+ this.progress = 1;
1349
+ clearInterval(interval);
1350
+ }
1351
+ }, 100);
1352
+ }
1353
+ startAnimations() {
1354
+ this.animationType('assets/imagesIdvision/face_scanning.json');
1355
+ this.animationProgress();
1356
+ this.animationText();
1357
+ }
1358
+ animationText() {
1359
+ this.showText = false;
1360
+ setTimeout(() => {
1361
+ this.showText = true;
1362
+ if (this.index >= this.texts.length) {
1363
+ if (this.comparsionStatus === 'success') {
1364
+ this.currentText = this.successText;
1365
+ this.animationType('assets/imagesIdvision/success.json', false);
1366
+ }
1367
+ else {
1368
+ this.currentText = this.errorText;
1369
+ this.animationType('assets/imagesIdvision/error.json', false);
1370
+ }
1371
+ return;
1372
+ }
1373
+ this.currentText = this.texts[this.index];
1374
+ this.index++;
1375
+ setTimeout(() => this.animationText(), 2000);
1376
+ }, 300);
1377
+ }
1378
+ openFacialValidation() {
1379
+ this.startAnimations();
1380
+ const payload = {
1381
+ endpoint: `${this.configEnv.env_endpoint}validateFace/api/validate`,
1382
+ headers: {
1383
+ apiKey: this.apikey,
1384
+ connectionMg: this.connection
1385
+ },
1386
+ body: {
1387
+ codigo: localStorage.getItem('codigo') ?? '',
1388
+ identificadorAnt: this.dpiCodeSecond
1389
+ }
1390
+ };
1391
+ this.comparsion(payload);
1392
+ }
1393
+ animationType(path, loop = true) {
1394
+ lottie.destroy();
1395
+ const container = this.elementRef.nativeElement.querySelector('.lottie-container');
1396
+ console.log('container:', container);
1397
+ if (!container) {
1398
+ console.log('No se encontró el contenedor Lottie');
1399
+ return;
1400
+ }
1401
+ lottie.loadAnimation({
1402
+ container: container,
1403
+ renderer: 'svg',
1404
+ loop,
1405
+ autoplay: true,
1406
+ path
1407
+ });
1408
+ }
1409
+ comparsion(payload) {
1410
+ this.dpiService.comparison(payload).subscribe({
1411
+ next: async (response) => {
1412
+ console.log('Respuesta de validación facial:', response);
1413
+ if (!response.error) {
1414
+ this.actionSuccess();
1415
+ return;
1416
+ }
1417
+ this.actionError();
1418
+ },
1419
+ error: async (error) => {
1420
+ console.error('Error en validación facial:', error);
1421
+ this.actionError();
1422
+ }
1423
+ });
1424
+ }
1425
+ actionSuccess() {
1426
+ this.comparsionStatus = 'success';
1427
+ this.validationService.updateValidationStep('validateFace', true);
1428
+ }
1429
+ actionError() {
1430
+ this.comparsionStatus = 'error';
1431
+ this.validationService.updateValidationStep('validateFace', false);
1432
+ }
1433
+ finalizar() {
1434
+ this.navigationService.navigateToCompletion();
1435
+ }
1436
+ async openAcuerdoVideoNew() {
1437
+ // Cerrar cualquier loading antes de abrir la modal
1438
+ await this.hideLoading();
1439
+ const modal = await this.modalController.create({
1440
+ component: AcuerdoVideoPage,
1441
+ componentProps: {
1442
+ backFunction: async (file) => {
1443
+ await this.getAcuerdoVideo(file);
1444
+ },
1445
+ closeRequested: async () => {
1446
+ await modal.dismiss();
1447
+ await this.handleExitWithResult(false, 'acuerdo-video-close');
1448
+ },
1449
+ },
1450
+ backdropDismiss: false,
1451
+ animated: !this.simpleProcess
1452
+ });
1453
+ await modal.present();
1454
+ }
1455
+ async handleInitSecurityExit() {
1456
+ await this.handleExitWithResult(false, 'init-camera-security-block');
1457
+ }
1458
+ async evaluateInitialCameraSecurity() {
1459
+ const detection = await this.virtualCameraDetectionService.detectSuspiciousVideoInputs();
1460
+ if (!detection.blocked)
1461
+ return true;
1462
+ this.isInitCameraBlocked = true;
1463
+ this.initCameraBlockReason = detection.reason;
1464
+ this.cdRef.detectChanges();
1465
+ return false;
1466
+ }
1467
+ async logAvailableVideoInputsOnInit() {
1468
+ if (!navigator?.mediaDevices?.enumerateDevices) {
1469
+ console.warn('[mediaDevices] enumerateDevices no está disponible en este entorno.');
1470
+ return;
1471
+ }
1472
+ try {
1473
+ const devices = await navigator.mediaDevices.enumerateDevices();
1474
+ const videoInputs = devices.filter((device) => device.kind === 'videoinput');
1475
+ if (!videoInputs.length) {
1476
+ console.warn('No se detectaron cámaras (videoinput).');
1477
+ return;
1478
+ }
1479
+ console.log(`Cámaras detectadas: ${videoInputs.length}`);
1480
+ videoInputs.forEach((camera, index) => {
1481
+ const safeLabel = camera.label?.trim() ? camera.label : '(sin label, falta permiso de cámara)';
1482
+ console.log(`[Camara] #${index + 1} label="${safeLabel}" deviceId="${camera.deviceId}" groupId="${camera.groupId || '-'}"`);
1483
+ });
1484
+ }
1485
+ catch (error) {
1486
+ console.error('[Camara] Error al enumerar cámaras:', error);
1487
+ }
1488
+ }
1489
+ static { this.ɵfac = function IdVisionComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || IdVisionComponent)(i0.ɵɵdirectiveInject(i1.ModalController), i0.ɵɵdirectiveInject(i1.AlertController), i0.ɵɵdirectiveInject(i1.Platform), i0.ɵɵdirectiveInject(i2.ModalDpiServices), i0.ɵɵdirectiveInject(i3.SdkCommunicationService), i0.ɵɵdirectiveInject(i1.NavController), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ToastController), i0.ɵɵdirectiveInject(i1.LoadingController), i0.ɵɵdirectiveInject(i4.ConfigurationService), i0.ɵɵdirectiveInject(i5.ValidationService), i0.ɵɵdirectiveInject(i6.NavigationService), i0.ɵɵdirectiveInject(i7.ProcessingService), i0.ɵɵdirectiveInject(i8.DpiService), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i9.VirtualCameraDetectionService)); }; }
1356
1490
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: IdVisionComponent, selectors: [["app-id-vision"]], viewQuery: function IdVisionComponent_Query(rf, ctx) { if (rf & 1) {
1357
1491
  i0.ɵɵviewQuery(_c0, 5);
1358
1492
  i0.ɵɵviewQuery(_c1, 5, ElementRef);
@@ -1360,25 +1494,28 @@ export class IdVisionComponent {
1360
1494
  let _t;
1361
1495
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dpi = _t.first);
1362
1496
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.swiperContainerRef = _t.first);
1363
- } }, inputs: { isSwipe: "isSwipe", dpiCode: "dpiCode", connection: "connection", apikey: "apikey", env: "env", validationConfig: "validationConfig" }, standalone: true, features: [i0.ɵɵProvidersFeature([DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService]), i0.ɵɵStandaloneFeature], decls: 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);
1497
+ } }, inputs: { isSwipe: "isSwipe", dpiCode: "dpiCode", dpiCodeSecond: "dpiCodeSecond", connection: "connection", apikey: "apikey", env: "env", validationConfig: "validationConfig" }, standalone: true, features: [i0.ɵɵProvidersFeature([DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService]), i0.ɵɵStandaloneFeature], decls: 16, vars: 9, consts: [["swiperContainer", ""], ["dpi", ""], ["class", "content", 4, "ngIf"], [1, "content"], ["init", "false", "class", "custom-swiper", 3, "swiperslidechange", 4, "ngIf"], [1, "sdk-metag-version"], ["vertical", "top", "horizontal", "end", "slot", "fixed", 4, "ngIf"], [1, "sdk-metag-wrapper-no-internet"], [1, "sdk-metag-content-no-internet"], [1, "sdk-metag-title-no-internet"], ["src", "assets/imagesIdvision/no-internet.svg", "alt", "Sin conexi\u00F3n img", 1, "sdk-metag-icon-no-internet"], [1, "sdk-metag-description-no-internet"], [3, "exitPressed", "title", "description", "reason", "exitLabel"], ["init", "false", 1, "custom-swiper", 3, "swiperslidechange"], [4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "slide-third"], ["class", "head", 4, "ngIf"], [1, "sdk-metag-image-confirmation"], ["src", "assets/imagesIdvision/blue-check.png", "alt", "Check morado"], ["expand", "block", 1, "action-button", 3, "click"], [1, "slide-one"], [1, "head"], [1, "head-title"], [1, "head-subtitle"], [1, "head-dpi"], ["type", "number", "disabled", "true", "placeholder", "0000000000000"], [1, "instructions"], [1, "instruction"], ["size", "3"], ["src", "assets/imagesIdvision/documentsImage.png", "alt", "", 1, "instruction-img"], [1, "instruction-description"], ["src", "assets/imagesIdvision/rostroImage.png", "alt", "", 1, "instruction-img"], [1, "slide-two", 3, "ngSwitch"], [3, "ngClass", 4, "ngSwitchCase"], [4, "ngSwitchCase"], [4, "ngSwitchDefault"], [3, "ngClass"], ["src", "assets/imagesIdvision/Foco.png", "alt", "", 1, "instruction-img"], [1, "card-wrapper"], [1, "card"], [1, "side", "front"], ["src", "assets/imagesIdvision/dpi_m_f.png", "alt", "Frontal"], [1, "side", "back"], ["src", "assets/imagesIdvision/dpi_t.png", "alt", "Reverso"], ["expand", "block", 1, "action-button", 3, "click", "disabled"], [1, "sdk-metag-head"], [1, "sdk-metag-h-title"], [1, "sdk-metag-p-justify"], [1, "sdk-metag-verify-container"], [1, "sdk-metag-image-container"], ["src", "assets/imagesIdvision/Foco.png", "alt", ""], [1, "sdk-metag-container-text"], ["src", "assets/imagesIdvision/rostroImage.png", "alt", ""], [1, "sdk-metag-fixed-footer"], ["expand", "block", 1, "sdk-metag-custom-button", 3, "click"], [1, "slide-six"], [1, "avatar-wrapper"], [1, "avatar-container"], [1, "avatar", 3, "src"], [1, "lottie-container"], [1, "status-container"], [1, "status-text"], [3, "value"], ["style", "margin: 100px auto 0 !important;", "class", "action-button button-success", "expand", "block", 3, "click", 4, "ngIf"], ["expand", "block", 1, "action-button", "button-success", 2, "margin", "100px auto 0 !important", 3, "click"], ["vertical", "top", "horizontal", "end", "slot", "fixed"], [1, "sdk-metag-button-debug", 3, "click"], ["name", "bug-outline"]], template: function IdVisionComponent_Template(rf, ctx) { if (rf & 1) {
1498
+ i0.ɵɵtemplate(0, IdVisionComponent_ion_content_0_Template, 2, 4, "ion-content", 2);
1499
+ i0.ɵɵelementStart(1, "ion-content", 3);
1500
+ i0.ɵɵtemplate(2, IdVisionComponent_swiper_container_2_Template, 12, 4, "swiper-container", 4);
1501
+ i0.ɵɵelementStart(3, "div", 5);
1502
+ i0.ɵɵtext(4);
1368
1503
  i0.ɵɵelementEnd();
1369
- i0.ɵɵtemplate(4, IdVisionComponent_ion_fab_4_Template, 3, 0, "ion-fab", 4);
1504
+ i0.ɵɵtemplate(5, IdVisionComponent_ion_fab_5_Template, 3, 0, "ion-fab", 6);
1370
1505
  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");
1506
+ i0.ɵɵelementStart(6, "ion-content")(7, "div", 7)(8, "div", 8)(9, "h2", 9);
1507
+ i0.ɵɵtext(10, "Sin conexi\u00F3n");
1373
1508
  i0.ɵɵelementEnd();
1374
- i0.ɵɵelement(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. ");
1509
+ i0.ɵɵelement(11, "img", 10);
1510
+ i0.ɵɵelementStart(12, "p", 11);
1511
+ i0.ɵɵtext(13, " No pudimos cargar la p\u00E1gina. ");
1512
+ i0.ɵɵelement(14, "br");
1513
+ i0.ɵɵtext(15, " Verifica tu internet y prueba de nuevo. ");
1379
1514
  i0.ɵɵelementEnd()()()();
1380
1515
  } if (rf & 2) {
1381
- i0.ɵɵstyleProp("display", ctx.hasInternet ? "block" : "none");
1516
+ i0.ɵɵproperty("ngIf", ctx.isInitCameraBlocked);
1517
+ i0.ɵɵadvance();
1518
+ i0.ɵɵstyleProp("display", ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
1382
1519
  i0.ɵɵadvance();
1383
1520
  i0.ɵɵproperty("ngIf", !ctx.simpleProcess);
1384
1521
  i0.ɵɵadvance(2);
@@ -1386,13 +1523,13 @@ export class IdVisionComponent {
1386
1523
  i0.ɵɵadvance();
1387
1524
  i0.ɵɵproperty("ngIf", ctx.showDebug);
1388
1525
  i0.ɵɵadvance();
1389
- i0.ɵɵstyleProp("display", !ctx.hasInternet ? "block" : "none");
1390
- } }, dependencies: [IonicModule, i1.IonButton, i1.IonContent, i1.IonFab, i1.IonFabButton, i1.IonGrid, i1.IonIcon, i1.IonInput, i1.IonItem, i1.IonRow, i1.NumericValueAccessor, CommonModule, i9.NgClass, i9.NgForOf, i9.NgIf, i9.NgSwitch, i9.NgSwitchCase, i9.NgSwitchDefault, HttpClientModule], styles: ["// ============================================\r\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\r\n// ============================================\r\n// Usamos :host para encapsular todo dentro del componente\r\n// y evitar que los estilos globales del padre nos afecten\r\n\r\n:host {\r\n display: block;\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n \r\n // Reset de estilos globales del padre\r\n * {\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n.content {\r\n padding: 10px;\r\n align-items: center;\r\n justify-content: center;\r\n height: 90vh;\r\n background-color: #fff;\r\n font-size: 18px;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}\r\n\r\n// Cuando es simpleProcess, levanta el contenido un 10%\r\n.content-simple-process {\r\n margin-top: 10vh;\r\n height: 90vh;\r\n}\r\n\r\n.h-title {\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n color: #F38301;\r\n text-align: center;\r\n margin-top: 20px;\r\n}\r\n\r\n:host p {\r\n font-size: 1em;\r\n color: #666;\r\n text-align: center;\r\n margin: 0;\r\n}\r\n\r\n:host ion-grid {\r\n margin-top: 20px;\r\n}\r\n\r\n:host ion-row {\r\n margin: 15px 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n:host ion-col {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n}\r\n\r\n:host ion-icon {\r\n font-size: 3em;\r\n color: #ff8c00;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.container-text {\r\n text-align: justify !important;\r\n width: 180px;\r\n}\r\n\r\n:host p {\r\n text-align: start;\r\n}\r\n\r\n.p-center {\r\n text-align: center;\r\n}\r\n\r\n.p-justify {\r\n text-align: start;\r\n}\r\n\r\n.head {\r\n padding: 20px;\r\n margin-top: 20px;\r\n margin-bottom: 80px;\r\n}\r\n\r\n\r\n.verify-container {\r\n // padding: 60px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\r\n text-align: center;\r\n //background-color: black;\r\n}\r\n\r\n.fixed-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 0px 10px 25px 10px;\r\n // background-color: black; // Color de fondo, opcional\r\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\r\n\r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n margin: 0 auto;\r\n background-color: #ffcc00;\r\n color: #ffffff;\r\n font-weight: bold;\r\n border-radius: 20px;\r\n\r\n &:hover {\r\n background-color: #ffb300;\r\n }\r\n\r\n &:active {\r\n background-color: #e6a800;\r\n }\r\n }\r\n}\r\n\r\n.dpi-container {\r\n display: flex;\r\n //width: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n height: 45vh;\r\n}\r\n\r\n.dpi-image {\r\n width: 200px;\r\n}\r\n\r\n.image-container {\r\n width: 100px;\r\n max-width: 90px;\r\n}\r\n\r\n.col-confirmation {\r\n margin-top: 100px;\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n /* Ajusta el espacio entre los elementos */\r\n}\r\n\r\n.image-item {\r\n margin-top: 50px;\r\n padding-top: 70px;\r\n}\r\n\r\n.font-confirmation {\r\n font-size: 26px;\r\n text-align: center;\r\n // color: #005da9;\r\n color: #82298F;\r\n font-weight: bold;\r\n}\r\n\r\n\r\n.rounded-input {\r\n margin-top: 15px;\r\n background-color: #f4f6fc;\r\n /* Color de fondo suave */\r\n border-radius: 10px;\r\n /* Bordes redondeados */\r\n padding: 5px 5px;\r\n /* Espaciado interno */\r\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\r\n /* Sombra suave */\r\n --ion-border-color: transparent;\r\n /* Quita cualquier borde por defecto */\r\n}\r\n\r\n:host ion-input {\r\n text-align: center;\r\n color: #F38301;\r\n --padding-start: 8px;\r\n}\r\n\r\n:host .custom-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n justify-content: space-between;\r\n background-color: #ffffff;\r\n}\r\n\r\n:host .custom-footer ion-button {\r\n flex: 0 0 48%;\r\n}\r\n\r\n:host .custom-footer .left-button {\r\n max-width: 140px;\r\n color: black;\r\n --background: white;\r\n --color: #82298F;\r\n --border-radius: 20px;\r\n --border-color: white;\r\n margin-right: auto;\r\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\r\n}\r\n\r\n:host .custom-footer .right-button {\r\n margin-left: auto;\r\n}\r\n\r\n.tutorial-head {\r\n padding-top: 50px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: black;\r\n}\r\n\r\n.center-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 60vh;\r\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\r\n width: 100%;\r\n}\r\n\r\n.tutorial-title {\r\n text-align: center;\r\n}\r\n\r\n.rounded-input ion-input {\r\n font-size: 14px;\r\n /* Tama\u00F1o de texto */\r\n color: #333;\r\n /* Color del texto */\r\n}\r\n\r\n.rounded-input::part(native) {\r\n background: transparent;\r\n /* Fondo transparente para evitar conflictos */\r\n}\r\n\r\n.p-info {\r\n font-weight: bold;\r\n color: #714e93\r\n}\r\n\r\n.custom-button {\r\n --background: var(--purple-primary, #82298F) !important;\r\n --background-hover: var(--purple-secondary, #2b0d30) !important;\r\n --background-activated: var(--purple-secondary, #2b0d30) !important;\r\n --color: #ffffff !important;\r\n --border-radius: 20px !important;\r\n --padding-top: 10px !important;\r\n --padding-bottom: 10px !important;\r\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\r\n text-transform: none;\r\n pointer-events: auto;\r\n\r\n}\r\n\r\n//blur effect\r\n\r\n.blur-effect {\r\n filter: blur(5px);\r\n pointer-events: none;\r\n}\r\n\r\n.blur-overlay {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(255, 255, 255, 0.7);\r\n z-index: 999;\r\n filter: blur(5px);\r\n}\r\n\r\n.boton-personalizado {\r\n background-color: #4caf50;\r\n /* Verde, por ejemplo */\r\n color: white;\r\n font-size: 16px;\r\n}\r\n\r\n.version {\r\n position: fixed;\r\n bottom: 10px;\r\n right: 10px;\r\n font-size: 12px;\r\n color: #888;\r\n z-index: 1000;\r\n}\r\n\r\n.button-debug {\r\n --background: #ff4081;\r\n --color: #fff;\r\n}\r\n\r\n\r\n.wrapper-no-internet {\r\n background-color: #fff;\r\n height: 100vh;\r\n display: flex;\r\n justify-content: center; /* centra en eje vertical */\r\n align-items: center; /* centra en eje horizontal */\r\n padding: 40px;\r\n background-image: url('assets/imagesIdvision/background.png') !important;\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n \r\n}\r\n\r\n.content-no-internet {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n gap: 16px;\r\n}\r\n\r\n.title-no-internet{\r\n color: #000;\r\n font-size: 32px;\r\n font-weight: bold;\r\n}\r\n\r\n.icon-no-internet {\r\n width: 125px;\r\n display: block;\r\n margin-top: 25px;\r\n}\r\n\r\n.description-no-internet {\r\n margin-top: 25px;\r\n font-size: 22px;\r\n color: #000;\r\n line-height: 1.5;\r\n text-align: center;\r\n}\r\n.no-border{\r\n --border-width: 0 !important;\r\n}\r\n\r\n.confirmation-screen {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 80vh; // Se integra al 80% de la vista\r\n padding: 25px;\r\n box-sizing: border-box;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-color: white;\r\n gap: 20px; // Espacio entre elementos\r\n}\r\n\r\n.image-confirmation {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n\r\n.image-confirmation img {\r\n max-width: 300px; // Reducido de 500px a 300px\r\n width: 50%; // Reducido de 80% a 50%\r\n height: auto;\r\n}\r\n\r\n.button-container {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n padding: 0 10px;\r\n \r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n }\r\n}\r\n\r\n\r\n.close-button {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px; \r\n z-index: 1000;\r\n font-size: 15px;\r\n --color: #888; \r\n}\r\n\r\n.p-margin {\r\n margin-top: 50px !important;\r\n}\r\n\r\n"], encapsulation: 2 }); }
1526
+ i0.ɵɵstyleProp("display", !ctx.hasInternet && !ctx.isInitCameraBlocked ? "block" : "none");
1527
+ } }, dependencies: [IonicModule, i1.IonButton, i1.IonCol, i1.IonContent, i1.IonFab, i1.IonFabButton, i1.IonGrid, i1.IonIcon, i1.IonInput, i1.IonItem, i1.IonProgressBar, i1.IonRow, i1.NumericValueAccessor, CommonModule, i10.NgClass, i10.NgForOf, i10.NgIf, i10.NgSwitch, i10.NgSwitchCase, i10.NgSwitchDefault, HttpClientModule, CameraSecurityBlockComponent], styles: ["// ============================================\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\n// ============================================\n// Usamos [_nghost-%COMP%] para[_ngcontent-%COMP%] encapsular[_ngcontent-%COMP%] todo[_ngcontent-%COMP%] dentro[_ngcontent-%COMP%] del[_ngcontent-%COMP%] componente\n//[_ngcontent-%COMP%] y[_ngcontent-%COMP%] evitar[_ngcontent-%COMP%] que[_ngcontent-%COMP%] los[_ngcontent-%COMP%] estilos[_ngcontent-%COMP%] globales[_ngcontent-%COMP%] del[_ngcontent-%COMP%] padre[_ngcontent-%COMP%] nos[_ngcontent-%COMP%] afecten\n\n[_ngcontent-%COMP%] {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n // Reset de estilos globales del padre\n * {\n box-sizing: border-box;\n }\n}\n\n.sdk-metag-content[_ngcontent-%COMP%] {\n padding: 10px;\n align-items: center;\n justify-content: center;\n height: 90vh;\n background-color: #fff;\n font-size: 18px;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n//[_ngcontent-%COMP%] Cuando[_ngcontent-%COMP%] es[_ngcontent-%COMP%] simpleProcess[_ngcontent-%COMP%], levanta[_ngcontent-%COMP%] el[_ngcontent-%COMP%] contenido[_ngcontent-%COMP%] un[_ngcontent-%COMP%] 10%\n.sdk-metag-content-simple-process[_ngcontent-%COMP%] {\n margin-top: 10vh;\n height: 90vh;\n}\n\n.sdk-metag-h-title[_ngcontent-%COMP%] {\n font-size: 1.5em;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n margin-top: 20px;\n}\n\n[_nghost-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 1em;\n color: #666;\n text-align: center;\n margin: 0;\n}\n\n[_nghost-%COMP%] ion-grid[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n[_nghost-%COMP%] ion-row[_ngcontent-%COMP%] {\n margin: 15px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n[_nghost-%COMP%] ion-col[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n[_nghost-%COMP%] ion-icon[_ngcontent-%COMP%] {\n font-size: 3em;\n color: #ff8c00;\n margin-bottom: 10px;\n}\n\n.sdk-metag-container-text[_ngcontent-%COMP%] {\n text-align: justify !important;\n width: 180px;\n}\n\n[_nghost-%COMP%] p[_ngcontent-%COMP%] {\n text-align: start;\n}\n\n.sdk-metag-p-center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.sdk-metag-p-justify[_ngcontent-%COMP%] {\n text-align: start;\n}\n\n.sdk-metag-head[_ngcontent-%COMP%] {\n padding: 20px;\n margin-top: 20px;\n margin-bottom: 80px;\n}\n\n\n.sdk-metag-verify-container[_ngcontent-%COMP%] {\n // padding: 60px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\n text-align: center;\n //background-color: black;\n}\n\n.sdk-metag-fixed-footer[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 0px 10px 25px 10px;\n // background-color: black; // Color de fondo, opcional\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\n\n ion-button {\n width: 90%;\n max-width: 300px;\n margin: 0 auto;\n background-color: #ffcc00;\n color: #ffffff;\n font-weight: bold;\n border-radius: 20px;\n\n &:hover {\n background-color: #ffb300;\n }\n\n &:active {\n background-color: #e6a800;\n }\n }\n}\n\n.sdk-metag-dpi-container[_ngcontent-%COMP%] {\n display: flex;\n //width: 100%;\n justify-content: center;\n align-items: center;\n height: 45vh;\n img {\n width: 90%;\n transform: rotate(270deg);\n }\n}\n\n.sdk-metag-dpi-image[_ngcontent-%COMP%] {\n width: 200px;\n}\n\n.sdk-metag-image-container[_ngcontent-%COMP%] {\n width: 100px;\n max-width: 90px;\n}\n\n.sdk-metag-col-confirmation[_ngcontent-%COMP%] {\n margin-top: 100px;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n \n\n}\n\n.sdk-metag-image-item[_ngcontent-%COMP%] {\n margin-top: 50px;\n padding-top: 70px;\n}\n\n.sdk-metag-font-confirmation[_ngcontent-%COMP%] {\n font-size: 26px;\n text-align: center;\n // color: #005da9;\n color: #82298F;\n font-weight: bold;\n}\n\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%] {\n margin-top: 15px;\n background-color: #f4f6fc;\n \n\n border-radius: 10px;\n \n\n padding: 5px 5px;\n \n\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n \n\n --ion-border-color: transparent;\n \n\n}\n\n[_nghost-%COMP%] ion-input[_ngcontent-%COMP%] {\n text-align: center;\n color: #F38301;\n --padding-start: 8px;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-between;\n background-color: #ffffff;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] ion-button[_ngcontent-%COMP%] {\n flex: 0 0 48%;\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] .sdk-metag-left-button[_ngcontent-%COMP%] {\n max-width: 140px;\n color: black;\n --background: white;\n --color: #82298F;\n --border-radius: 20px;\n --border-color: white;\n margin-right: auto;\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\n}\n\n[_nghost-%COMP%] .sdk-metag-custom-footer[_ngcontent-%COMP%] .sdk-metag-right-button[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.sdk-metag-tutorial-head[_ngcontent-%COMP%] {\n padding-top: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: black;\n}\n\n.sdk-metag-center-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 60vh;\n \n\n width: 100%;\n}\n\n.sdk-metag-tutorial-title[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%] ion-input[_ngcontent-%COMP%] {\n font-size: 14px;\n \n\n color: #333;\n \n\n}\n\n.sdk-metag-rounded-input[_ngcontent-%COMP%]::part(native) {\n background: transparent;\n \n\n}\n\n.sdk-metag-p-info[_ngcontent-%COMP%] {\n font-weight: bold;\n color: #714e93\n}\n\n.sdk-metag-custom-button[_ngcontent-%COMP%] {\n --background: var(--purple-primary, #82298F) !important;\n --background-hover: var(--purple-secondary, #2b0d30) !important;\n --background-activated: var(--purple-secondary, #2b0d30) !important;\n --color: #ffffff !important;\n --border-radius: 20px !important;\n --padding-top: 10px !important;\n --padding-bottom: 10px !important;\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\n text-transform: none;\n pointer-events: auto;\n\n}\n\n//blur[_ngcontent-%COMP%] effect\n\n.sdk-metag-blur-effect[_ngcontent-%COMP%] {\n filter: blur(5px);\n pointer-events: none;\n}\n\n.sdk-metag-blur-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 999;\n filter: blur(5px);\n}\n\n.sdk-metag-boton-personalizado[_ngcontent-%COMP%] {\n background-color: #4caf50;\n \n\n color: white;\n font-size: 16px;\n}\n\n.sdk-metag-version[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 10px;\n right: 10px;\n font-size: 12px;\n z-index: 1000;\n background: #f4f6fc !important;\n padding: 10px 15px !important;\n border-radius: 20px !important;\n}\n\n.sdk-metag-button-debug[_ngcontent-%COMP%] {\n --background: #ff4081;\n --color: #fff;\n}\n\n\n.sdk-metag-wrapper-no-internet[_ngcontent-%COMP%] {\n background-color: #fff;\n height: 100vh;\n display: flex;\n justify-content: center; \n\n align-items: center; \n\n padding: 40px;\n background-image: url('assets/imagesIdvision/background.png') !important;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n}\n\n.sdk-metag-content-no-internet[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 16px;\n}\n\n.sdk-metag-title-no-internet[_ngcontent-%COMP%] {\n color: #000;\n font-size: 32px;\n font-weight: bold;\n}\n\n.sdk-metag-icon-no-internet[_ngcontent-%COMP%] {\n width: 125px;\n display: block;\n margin-top: 25px;\n}\n\n.sdk-metag-description-no-internet[_ngcontent-%COMP%] {\n margin-top: 25px;\n font-size: 22px;\n color: #000;\n line-height: 1.5;\n text-align: center;\n}\n\n.sdk-metag-no-border[_ngcontent-%COMP%] {\n --border-width: 0 !important;\n}\n\n.sdk-metag-confirmation-screen[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 80vh; // Se integra al 80% de la vista\n padding: 25px;\n box-sizing: border-box;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n background-color: white;\n gap: 20px; // Espacio entre elementos\n}\n\n.sdk-metag-image-confirmation[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n}\n\n.sdk-metag-image-confirmation[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n max-width: 300px; // Reducido de 500px a 300px\n width: 40%; // Reducido de 80% a 50%\n height: auto;\n}\n\n.sdk-metag-button-container[_ngcontent-%COMP%] {\n width: 100%;\n display: flex;\n justify-content: center;\n padding: 0 10px;\n\n ion-button {\n width: 90%;\n max-width: 300px;\n }\n}\n\n\n.sdk-metag-close-button[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 1000;\n font-size: 15px;\n --color: #888;\n}\n\n.sdk-metag-p-margin[_ngcontent-%COMP%] {\n margin-top: 50px !important;\n}\n\n.content[_ngcontent-%COMP%] {\n background-color: #ffffff;\n --background: #ffffff;\n}\n\n\n\n.head[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.head-title[_ngcontent-%COMP%] {\n font-size: 23px;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n}\n\n.description[_ngcontent-%COMP%] {\n text-align: center;\n margin-top: 25px;\n font-size: 14px;\n margin-bottom: 25px;\n}\n\n.head-subtitle[_ngcontent-%COMP%] {\n text-align: justify;\n margin-top: 25px;\n font-size: 14px;\n}\n\n.head-dpi[_ngcontent-%COMP%] {\n margin-top: 25px;\n //background-color: #f4f6fc;\n border-radius: 10px;\n --ion-border-color: transparent;\n //padding: 5px 5px;\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n --background: #f4f6fc !important;\n\n ion-input {\n text-align: center;\n color: #F38301;\n font-weight: 500;\n font-size: 19px;\n }\n}\n\n.instructions[_ngcontent-%COMP%] {\n}\n\n.instruction[_ngcontent-%COMP%] {\n margin: 0 !important;\n}\n\n.instruction-img[_ngcontent-%COMP%] {\n width: 100px;\n max-width: 100px;\n}\n\n.instruction-description[_ngcontent-%COMP%] {\n font-size: 13px;\n text-align: justify;\n padding-right: 15px;\n}\n\n.action-button[_ngcontent-%COMP%] {\n width: 300px;\n max-width: 300px;\n margin: 25px auto;\n --background: #82298F;\n --color: #ffffff;\n font-weight: bold;\n --border-radius: 20px;\n --box-shadow: none;\n}\n\n.exit-button[_ngcontent-%COMP%] {\n --background: transparent !important;\n --color: #F38301 !important;\n}\n\n.action-button[_ngcontent-%COMP%]:hover {\n --background: #82298F;\n}\n\n.action-button[_ngcontent-%COMP%]:active {\n --background: #82298F;\n}\n\n\n\n.card-wrapper[_ngcontent-%COMP%] {\n perspective: 1000px;\n //margin: 40px;\n margin: 25px;\n}\n\n\n\n.card[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n height: 350px;\n transform-style: preserve-3d;\n transition: transform 1s ease-in-out;\n cursor: pointer;\n}\n\n\n\n.card.flip[_ngcontent-%COMP%] {\n transform: rotateY(180deg);\n}\n\n\n\n.side[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n\n img {\n transform: rotate(270deg);\n width: 100%;\n object-fit: contain;\n }\n}\n\n.front[_ngcontent-%COMP%] {\n z-index: 2;\n}\n\n.back[_ngcontent-%COMP%] {\n transform: rotateY(180deg);\n}\n\n.avatar-wrapper[_ngcontent-%COMP%]{\n width:100%;\n display:flex;\n justify-content:center;\n margin-bottom:20px;\n}\n\n.avatar-container[_ngcontent-%COMP%]{\n position:relative;\n width:300px;\n height:300px;\n margin-bottom: 25px;\n}\n\n.avatar[_ngcontent-%COMP%]{\n width:100%;\n height:100%;\n border-radius:50%;\n object-fit:cover;\n padding: 35px;\n}\n\n.lottie-container[_ngcontent-%COMP%]{\n position:absolute;\n inset:0;\n}\n\nion-progress-bar[_ngcontent-%COMP%]{\n height:7px;\n border-radius:10px;\n --progress-background: #F38301;\n}\n\n.slide-six[_ngcontent-%COMP%] {\n}\n\n\n.status-container[_ngcontent-%COMP%] {\n text-align: center !important;\n margin-top: 20px;\n min-height: 30px;\n}\n\n.status-text[_ngcontent-%COMP%] {\n text-align: center !important;\n color: #444;\n font-size: 14px !important;\n opacity: 0;\n transform: translateY(10px);\n transition: all .4s ease;\n}\n\n.status-text.show[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateY(0);\n}\n\n.button-success[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_checkPop 0.4s ease;\n}\n\n@keyframes _ngcontent-%COMP%_checkPop{\n\n 0%{\n transform: scale(0);\n opacity:0;\n }\n\n 60%{\n transform: scale(1.2);\n }\n\n 100%{\n transform: scale(1);\n opacity:1;\n }\n\n}"] }); }
1391
1528
  }
1392
1529
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IdVisionComponent, [{
1393
1530
  type: Component,
1394
- args: [{ selector: 'app-id-vision', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [IonicModule, CommonModule, HttpClientModule], providers: [DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService], encapsulation: ViewEncapsulation.None, template: "\r\n\r\n<ion-content [style.display]=\"hasInternet ? 'block' : 'none'\">\r\n \r\n <swiper-container *ngIf=\"!simpleProcess\" init=\"false\" class=\"custom-swiper\" #swiperContainer>\r\n\r\n <!-- \uD83D\uDD39 PASO 1: Verificaci\u00F3n de Identidad (Est\u00E1tico) -->\r\n <swiper-slide *ngIf=\"!simpleProcess\">\r\n <div class=\"content\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Verifiquemos tu identidad</h2>\r\n <p class=\"p-justify p-margin\">Para completar tu verificaci\u00F3n, por favor ingresa tu n\u00FAmero de identificaci\u00F3n (DPI).</p>\r\n <ion-item class=\"rounded-input\">\r\n <ion-input #dpi type=\"number\" disabled=\"true\" placeholder=\"Digita tu n\u00FAmero de DPI\"></ion-input>\r\n </ion-item>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/documentsImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Sube fotos de documentos que prueben tu identidad</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Graba un video selfie, mant\u00E9n tu rostro centrado en la pantalla y evita moverte.</p>\r\n </div>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"handleClick()\">Empecemos</ion-button>\r\n </div>\r\n </div>\r\n </swiper-slide>\r\n\r\n <!-- \uD83D\uDD39 PASOS INTERMEDIOS: Se generan din\u00E1micamente seg\u00FAn el `order` -->\r\n <swiper-slide *ngFor=\"let step of validationConfig\">\r\n <div class=\"content\" [ngClass]=\"{'content-simple-process': simpleProcess}\" [ngSwitch]=\"step.type\">\r\n <!--Acuerdo de video-->\r\n <div *ngSwitchCase=\"1\" [ngClass]=\"{'blur-effect': simpleProcess}\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Acuerdo de v\u00EDdeo</h2>\r\n <p class=\"p-justify\">Graba un breve video para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <!-- \uD83D\uDD39 DPI Frontal -->\r\n <div *ngSwitchCase=\"2\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Coloca la parte frontal de tu DPI</h2>\r\n <p class=\"p-center p-info p-margin\">Evita sombras, reflejos y coloca tu documento dentro del recuadro.</p>\r\n </div>\r\n <div class=\"dpi-container\">\r\n <img src=\"assets/imagesIdvision/dpi-front-1.png\" alt=\"\" />\r\n </div>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Tomar una foto</ion-button>\r\n </div>\r\n </div>\r\n\r\n <!-- \uD83D\uDD39 DPI Trasero -->\r\n <div *ngSwitchCase=\"3\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Coloca el reverso de tu DPI</h2>\r\n <p class=\"p-center p-info p-margin\">Evita sombras, reflejos y coloca tu documento dentro del recuadro.</p>\r\n </div>\r\n <div class=\"dpi-container\">\r\n <img src=\"assets/imagesIdvision/dpi-back-1.png\" alt=\"\" />\r\n </div>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Tomar una foto</ion-button>\r\n </div>\r\n </div>\r\n\r\n <!-- \uD83D\uDD39 Video Selfie -->\r\n <div *ngSwitchCase=\"4\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Video Selfie</h2>\r\n <p class=\"p-justify p-margin\">Graba un breve video para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p class=\"p-justify\">Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <!-- Photo Selfie -->\r\n <!-- TODO Se debera cambiar a 5, se dejo 1 por acuerdo de video -->\r\n <div *ngSwitchCase=\"5\">\r\n <div class=\"head\">\r\n <h2 class=\"h-title\">Foto Selfie</h2>\r\n <p class=\"p-justify\">Toma una foto para completar tu proceso de identificaci\u00F3n.</p>\r\n </div>\r\n <ion-grid class=\"verify-container\">\r\n <ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\r\n </div>\r\n </ion-row>\r\n <ion-row>\r\n <div class=\"image-container\">\r\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\" />\r\n </div>\r\n <div class=\"container-text\">\r\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\r\n </div>\r\n </ion-row>\r\n </ion-row>\r\n </ion-grid>\r\n <div class=\"fixed-footer\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\r\n </div>\r\n </div>\r\n <div *ngSwitchDefault>\r\n <h2>Paso desconocido</h2>\r\n </div>\r\n </div>\r\n </swiper-slide>\r\n <swiper-slide>\r\n <div class=\"confirmation-screen\">\r\n <div class=\"font-confirmation\" *ngIf=\"isValid\">\r\n <p class=\"font-confirmation\">Informaci\u00F3n procesada de manera correcta</p>\r\n </div>\r\n <div class=\"font-confirmation\" *ngIf=\"!isValid\">\r\n <p class=\"font-confirmation\">Ocurri\u00F3 un error al procesar la informaci\u00F3n</p>\r\n </div>\r\n <div class=\"image-confirmation\">\r\n <img src=\"assets/imagesIdvision/blue-check.png\" alt=\"Check morado\" />\r\n </div>\r\n <div class=\"button-container\">\r\n <ion-button class=\"custom-button\" expand=\"block\" (click)=\"handleExit()\">Continuar</ion-button>\r\n </div>\r\n </div>\r\n\r\n\r\n </swiper-slide>\r\n\r\n </swiper-container>\r\n <div class=\"version\">{{versionSDK}} {{configEnv.show_label ? configEnv.env_name: ''}}</div>\r\n <ion-fab vertical=\"top\" horizontal=\"end\" slot=\"fixed\" *ngIf=\"showDebug\">\r\n <ion-fab-button class=\"button-debug\" (click)=\"copyProccess()\">\r\n <ion-icon name=\"bug-outline\"></ion-icon>\r\n </ion-fab-button>\r\n </ion-fab>\r\n\r\n</ion-content>\r\n<!-- pantalla para cuando no exista internet -->\r\n<ion-content [style.display]=\"!hasInternet ? 'block' : 'none'\">\r\n <div class=\"wrapper-no-internet\">\r\n <div class=\"content-no-internet\">\r\n <h2 class=\"title-no-internet\">Error de conexi\u00F3n</h2>\r\n <img src=\"assets/imagesIdvision/no-internet.svg\" alt=\"Error conexi\u00F3n img\" class=\"icon-no-internet\" />\r\n <p class=\"description-no-internet\">\r\n No pudimos cargar la p\u00E1gina. <br>\r\n Verifica tu internet y prueba de nuevo.\r\n </p>\r\n </div>\r\n </div>\r\n</ion-content>", styles: ["// ============================================\r\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\r\n// ============================================\r\n// Usamos :host para encapsular todo dentro del componente\r\n// y evitar que los estilos globales del padre nos afecten\r\n\r\n:host {\r\n display: block;\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n \r\n // Reset de estilos globales del padre\r\n * {\r\n box-sizing: border-box;\r\n }\r\n}\r\n\r\n.content {\r\n padding: 10px;\r\n align-items: center;\r\n justify-content: center;\r\n height: 90vh;\r\n background-color: #fff;\r\n font-size: 18px;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n}\r\n\r\n// Cuando es simpleProcess, levanta el contenido un 10%\r\n.content-simple-process {\r\n margin-top: 10vh;\r\n height: 90vh;\r\n}\r\n\r\n.h-title {\r\n font-size: 1.5em;\r\n font-weight: bold;\r\n color: #F38301;\r\n text-align: center;\r\n margin-top: 20px;\r\n}\r\n\r\n:host p {\r\n font-size: 1em;\r\n color: #666;\r\n text-align: center;\r\n margin: 0;\r\n}\r\n\r\n:host ion-grid {\r\n margin-top: 20px;\r\n}\r\n\r\n:host ion-row {\r\n margin: 15px 0;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n}\r\n\r\n:host ion-col {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n}\r\n\r\n:host ion-icon {\r\n font-size: 3em;\r\n color: #ff8c00;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.container-text {\r\n text-align: justify !important;\r\n width: 180px;\r\n}\r\n\r\n:host p {\r\n text-align: start;\r\n}\r\n\r\n.p-center {\r\n text-align: center;\r\n}\r\n\r\n.p-justify {\r\n text-align: start;\r\n}\r\n\r\n.head {\r\n padding: 20px;\r\n margin-top: 20px;\r\n margin-bottom: 80px;\r\n}\r\n\r\n\r\n.verify-container {\r\n // padding: 60px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\r\n text-align: center;\r\n //background-color: black;\r\n}\r\n\r\n.fixed-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 0px 10px 25px 10px;\r\n // background-color: black; // Color de fondo, opcional\r\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\r\n\r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n margin: 0 auto;\r\n background-color: #ffcc00;\r\n color: #ffffff;\r\n font-weight: bold;\r\n border-radius: 20px;\r\n\r\n &:hover {\r\n background-color: #ffb300;\r\n }\r\n\r\n &:active {\r\n background-color: #e6a800;\r\n }\r\n }\r\n}\r\n\r\n.dpi-container {\r\n display: flex;\r\n //width: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n height: 45vh;\r\n}\r\n\r\n.dpi-image {\r\n width: 200px;\r\n}\r\n\r\n.image-container {\r\n width: 100px;\r\n max-width: 90px;\r\n}\r\n\r\n.col-confirmation {\r\n margin-top: 100px;\r\n padding: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 20px;\r\n /* Ajusta el espacio entre los elementos */\r\n}\r\n\r\n.image-item {\r\n margin-top: 50px;\r\n padding-top: 70px;\r\n}\r\n\r\n.font-confirmation {\r\n font-size: 26px;\r\n text-align: center;\r\n // color: #005da9;\r\n color: #82298F;\r\n font-weight: bold;\r\n}\r\n\r\n\r\n.rounded-input {\r\n margin-top: 15px;\r\n background-color: #f4f6fc;\r\n /* Color de fondo suave */\r\n border-radius: 10px;\r\n /* Bordes redondeados */\r\n padding: 5px 5px;\r\n /* Espaciado interno */\r\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\r\n /* Sombra suave */\r\n --ion-border-color: transparent;\r\n /* Quita cualquier borde por defecto */\r\n}\r\n\r\n:host ion-input {\r\n text-align: center;\r\n color: #F38301;\r\n --padding-start: 8px;\r\n}\r\n\r\n:host .custom-footer {\r\n position: fixed;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n padding: 10px;\r\n display: flex;\r\n justify-content: space-between;\r\n background-color: #ffffff;\r\n}\r\n\r\n:host .custom-footer ion-button {\r\n flex: 0 0 48%;\r\n}\r\n\r\n:host .custom-footer .left-button {\r\n max-width: 140px;\r\n color: black;\r\n --background: white;\r\n --color: #82298F;\r\n --border-radius: 20px;\r\n --border-color: white;\r\n margin-right: auto;\r\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\r\n}\r\n\r\n:host .custom-footer .right-button {\r\n margin-left: auto;\r\n}\r\n\r\n.tutorial-head {\r\n padding-top: 50px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: black;\r\n}\r\n\r\n.center-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 60vh;\r\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\r\n width: 100%;\r\n}\r\n\r\n.tutorial-title {\r\n text-align: center;\r\n}\r\n\r\n.rounded-input ion-input {\r\n font-size: 14px;\r\n /* Tama\u00F1o de texto */\r\n color: #333;\r\n /* Color del texto */\r\n}\r\n\r\n.rounded-input::part(native) {\r\n background: transparent;\r\n /* Fondo transparente para evitar conflictos */\r\n}\r\n\r\n.p-info {\r\n font-weight: bold;\r\n color: #714e93\r\n}\r\n\r\n.custom-button {\r\n --background: var(--purple-primary, #82298F) !important;\r\n --background-hover: var(--purple-secondary, #2b0d30) !important;\r\n --background-activated: var(--purple-secondary, #2b0d30) !important;\r\n --color: #ffffff !important;\r\n --border-radius: 20px !important;\r\n --padding-top: 10px !important;\r\n --padding-bottom: 10px !important;\r\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\r\n text-transform: none;\r\n pointer-events: auto;\r\n\r\n}\r\n\r\n//blur effect\r\n\r\n.blur-effect {\r\n filter: blur(5px);\r\n pointer-events: none;\r\n}\r\n\r\n.blur-overlay {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(255, 255, 255, 0.7);\r\n z-index: 999;\r\n filter: blur(5px);\r\n}\r\n\r\n.boton-personalizado {\r\n background-color: #4caf50;\r\n /* Verde, por ejemplo */\r\n color: white;\r\n font-size: 16px;\r\n}\r\n\r\n.version {\r\n position: fixed;\r\n bottom: 10px;\r\n right: 10px;\r\n font-size: 12px;\r\n color: #888;\r\n z-index: 1000;\r\n}\r\n\r\n.button-debug {\r\n --background: #ff4081;\r\n --color: #fff;\r\n}\r\n\r\n\r\n.wrapper-no-internet {\r\n background-color: #fff;\r\n height: 100vh;\r\n display: flex;\r\n justify-content: center; /* centra en eje vertical */\r\n align-items: center; /* centra en eje horizontal */\r\n padding: 40px;\r\n background-image: url('assets/imagesIdvision/background.png') !important;\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n \r\n}\r\n\r\n.content-no-internet {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n text-align: center;\r\n gap: 16px;\r\n}\r\n\r\n.title-no-internet{\r\n color: #000;\r\n font-size: 32px;\r\n font-weight: bold;\r\n}\r\n\r\n.icon-no-internet {\r\n width: 125px;\r\n display: block;\r\n margin-top: 25px;\r\n}\r\n\r\n.description-no-internet {\r\n margin-top: 25px;\r\n font-size: 22px;\r\n color: #000;\r\n line-height: 1.5;\r\n text-align: center;\r\n}\r\n.no-border{\r\n --border-width: 0 !important;\r\n}\r\n\r\n.confirmation-screen {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n height: 80vh; // Se integra al 80% de la vista\r\n padding: 25px;\r\n box-sizing: border-box;\r\n background-image: url('assets/imagesIdvision/background.png');\r\n background-size: cover;\r\n background-repeat: no-repeat;\r\n background-position: center;\r\n background-color: white;\r\n gap: 20px; // Espacio entre elementos\r\n}\r\n\r\n.image-confirmation {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n}\r\n\r\n.image-confirmation img {\r\n max-width: 300px; // Reducido de 500px a 300px\r\n width: 50%; // Reducido de 80% a 50%\r\n height: auto;\r\n}\r\n\r\n.button-container {\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n padding: 0 10px;\r\n \r\n ion-button {\r\n width: 90%;\r\n max-width: 300px;\r\n }\r\n}\r\n\r\n\r\n.close-button {\r\n position: absolute;\r\n top: 12px;\r\n right: 12px; \r\n z-index: 1000;\r\n font-size: 15px;\r\n --color: #888; \r\n}\r\n\r\n.p-margin {\r\n margin-top: 50px !important;\r\n}\r\n\r\n"] }]
1395
- }], () => [{ type: i1.ModalController }, { type: i1.AlertController }, { type: i1.Platform }, { type: i2.ModalDpiServices }, { type: i3.SdkCommunicationService }, { type: i1.NavController }, { type: i0.ChangeDetectorRef }, { type: i1.ToastController }, { type: i1.LoadingController }, { type: i4.ConfigurationService }, { type: i5.ValidationService }, { type: i6.NavigationService }, { type: i7.ProcessingService }, { type: i8.DpiService }], { dpi: [{
1531
+ args: [{ selector: 'app-id-vision', standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [IonicModule, CommonModule, HttpClientModule, CameraSecurityBlockComponent], providers: [DpiService, ConfigurationService, ValidationService, NavigationService, ProcessingService], encapsulation: ViewEncapsulation.Emulated, template: "<ion-content *ngIf=\"isInitCameraBlocked\" class=\"content\">\n <app-camera-security-block\n [title]=\"'Bloqueo por seguridad'\"\n [description]=\"'Detectamos una c\u00E1mara virtual o no permitida durante la inicializaci\u00F3n del SDK.'\"\n [reason]=\"initCameraBlockReason\"\n [exitLabel]=\"'Entiendo'\"\n (exitPressed)=\"handleInitSecurityExit()\">\n </app-camera-security-block>\n</ion-content>\n\n<ion-content class=\"content\" [style.display]=\"hasInternet && !isInitCameraBlocked ? 'block' : 'none'\">\n\n <swiper-container *ngIf=\"!simpleProcess\" init=\"false\" class=\"custom-swiper\" #swiperContainer\n (swiperslidechange)=\"onSlideChange()\">\n\n <!-- \uD83D\uDD39 PASO 1: Verificaci\u00F3n de Identidad (Est\u00E1tico) -->\n <swiper-slide *ngIf=\"!simpleProcess\">\n <div class=\"slide-one\">\n <div class=\"head\">\n <div class=\"head-title\">Verifiquemos tu identidad</div>\n <div class=\"head-subtitle\">\n Por favor confirma tu n\u00FAmero de identificaci\u00F3n (DPI) y sigue las instrucciones.\n </div>\n\n <ion-item class=\"head-dpi\">\n <ion-input #dpi type=\"number\" disabled=\"true\" placeholder=\"0000000000000\"></ion-input>\n </ion-item>\n </div>\n\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/documentsImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">\n Ten a la mano tu DPI y sube una foto del frente y reverso de tu documento.\n </div>\n </ion-col>\n </ion-row>\n\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">\n Graba un video corto, mant\u00E9n tu rostro dentro del c\u00EDrculo y evita moverte.\n </div>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <ion-button\n class=\"action-button\"\n expand=\"block\"\n (click)=\"handleClick()\">\n Empecemos\n </ion-button>\n </div>\n </swiper-slide>\n\n <!-- \uD83D\uDD39 PASOS INTERMEDIOS: Se generan din\u00E1micamente seg\u00FAn el `order` -->\n <swiper-slide *ngFor=\"let step of validationConfig\">\n <div class=\"slide-two\" [ngSwitch]=\"step.type\">\n <!--Acuerdo de video-->\n <div *ngSwitchCase=\"1\" [ngClass]=\"{'sdk-metag-blur-effect': simpleProcess}\">\n <div class=\"head\">\n <div class=\"head-title\">Acuerdo de v\u00EDdeo</div>\n <div class=\"head-subtitle\">Graba un video corto para completar tu proceso de identificaci\u00F3n.</div>\n </div>\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">Tu rostro debe de estar iluminado sin sombra y sin reflejos.\n </div>\n </ion-col>\n </ion-row>\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">No uses anteojos, ni sombreros, tu rostro debe estar visible.</div>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\n\n </div>\n <!-- \uD83D\uDD39 DPI Frontal -->\n <div *ngSwitchCase=\"2\">\n <div class=\"head\">\n <div class=\"head-title\">DPI frontal</div>\n <div class=\"head-subtitle\">\n Toma una foto de la parte frontal de tu documento,\n asegurate que este dentro del recuadro, evita sombras y reflejos.\n </div>\n </div>\n\n <div class=\"card-wrapper\">\n <div class=\"card\">\n <div class=\"side front\">\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"Frontal\">\n </div>\n </div>\n </div>\n <!--<div class=\"sdk-metag-dpi-container\">\n <img src=\"assets/imagesIdvision/dpi-front-1.png\" alt=\"\"/>\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"\"/>\n </div>-->\n\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Tomar foto</ion-button>\n </div>\n\n <!-- \uD83D\uDD39 DPI Trasero -->\n <div *ngSwitchCase=\"3\">\n <div class=\"head\">\n <div class=\"head-title\">DPI reverso</div>\n <div class=\"head-subtitle\">\n Voltea tu documento y toma una foto del reverso de tu documento,\n asegurate que este dentro del recuadro, evita sombras y reflejos.\n </div>\n </div>\n\n <div class=\"card-wrapper\">\n <div class=\"card\" [class.flip]=\"flip\">\n <div class=\"side front\">\n <img src=\"assets/imagesIdvision/dpi_m_f.png\" alt=\"Frontal\">\n </div>\n <div class=\"side back\">\n <img src=\"assets/imagesIdvision/dpi_t.png\" alt=\"Reverso\">\n </div>\n </div>\n </div>\n\n <!--<div class=\"sdk-metag-dpi-container\">\n <img src=\"assets/imagesIdvision/dpi-back-1.png\" alt=\"\"/>\n <img src=\"assets/imagesIdvision/dpi_t.png\" alt=\"\"/>\n </div>-->\n <ion-button [disabled]=\"waitFlip\" class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Tomar foto\n </ion-button>\n </div>\n\n <!-- \uD83D\uDD39 Video Selfie -->\n <div *ngSwitchCase=\"4\">\n <div class=\"head\">\n <div class=\"head-title\">Prueba de vida</div>\n <div class=\"head-subtitle\">Graba un video corto para completar tu proceso de identificaci\u00F3n.</div>\n </div>\n <ion-grid class=\"instructions\">\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">Tu rostro debe de estar iluminado sin sombra y sin reflejos.</div>\n </ion-col>\n </ion-row>\n <ion-row class=\"instruction\">\n <ion-col size=\"3\">\n <img class=\"instruction-img\" src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </ion-col>\n <ion-col>\n <div class=\"instruction-description\">No uses anteojos, ni sombreros, tu rostro debe estar visible.</div>\n </ion-col>\n </ion-row>\n </ion-grid>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara</ion-button>\n </div>\n <!-- Photo Selfie -->\n <!-- TODO Se debera cambiar a 5, se dejo 1 por acuerdo de video -->\n <div *ngSwitchCase=\"5\">\n <div class=\"sdk-metag-head\">\n <h2 class=\"sdk-metag-h-title\">Foto Selfie</h2>\n <p class=\"sdk-metag-p-justify\">Toma una foto para completar tu proceso de identificaci\u00F3n.</p>\n </div>\n <ion-grid class=\"sdk-metag-verify-container\">\n <ion-row>\n <ion-row>\n <div class=\"sdk-metag-image-container\">\n <img src=\"assets/imagesIdvision/Foco.png\" alt=\"\"/>\n </div>\n <div class=\"sdk-metag-container-text\">\n <p>Si est\u00E1s en interiores, aseg\u00FArate de que la luz est\u00E9 frente a ti, no detr\u00E1s.</p>\n </div>\n </ion-row>\n <ion-row>\n <div class=\"sdk-metag-image-container\">\n <img src=\"assets/imagesIdvision/rostroImage.png\" alt=\"\"/>\n </div>\n <div class=\"sdk-metag-container-text\">\n <p>Aseg\u00FArate de que tu rostro sea visible y de no usar anteojos ni sombreros.</p>\n </div>\n </ion-row>\n </ion-row>\n </ion-grid>\n <div class=\"sdk-metag-fixed-footer\">\n <ion-button class=\"sdk-metag-custom-button\" expand=\"block\" (click)=\"step.action()\">Abrir la c\u00E1mara\n </ion-button>\n </div>\n </div>\n <div *ngSwitchCase=\"6\">\n <div class=\"slide-six\">\n <div class=\"head\">\n <div class=\"head-title\">Verificando identidad</div>\n </div>\n\n <div class=\"avatar-wrapper\">\n\n <div class=\"avatar-container\">\n <img src=\"{{image}}\" class=\"avatar\">\n <div class=\"lottie-container\"></div>\n\n <!--<div class=\"description\">Por favor, espera un momento...</div>-->\n\n <div class=\"status-container\">\n <!--<ion-icon *ngIf=\"progress === 1\" name=\"checkmark-circle\" class=\"success-check\"></ion-icon>-->\n <p class=\"status-text\"\n [class.show]=\"showText\">\n {{ currentText }}\n </p>\n </div>\n\n\n <ion-progress-bar [value]=\"progress\"></ion-progress-bar>\n </div>\n </div>\n <ion-button\n style=\"margin: 100px auto 0 !important;\"\n *ngIf=\"progress === 1 && comparsionStatus === 'success'\"\n class=\"action-button button-success\"\n expand=\"block\"\n (click)=\"finalizar()\">\n Continuar\n </ion-button>\n <ion-button\n style=\"margin: 100px auto 0 !important;\"\n *ngIf=\"progress === 1 && comparsionStatus === 'error'\"\n class=\"action-button button-success\"\n expand=\"block\"\n (click)=\"handleExit()\">\n Salir\n </ion-button>\n </div>\n </div>\n <div *ngSwitchDefault>\n <h2>Paso desconocido</h2>\n </div>\n </div>\n </swiper-slide>\n\n <swiper-slide>\n <div class=\"slide-third\">\n <div class=\"head\" *ngIf=\"isValid\">\n <div class=\"head-title\">Informaci\u00F3n procesada de manera correcta</div>\n </div>\n <div class=\"head\" *ngIf=\"!isValid\">\n <div class=\"head-title\">No se pudo procesar la informaci\u00F3n</div>\n </div>\n <div class=\"sdk-metag-image-confirmation\">\n <img src=\"assets/imagesIdvision/blue-check.png\" alt=\"Check morado\"/>\n </div>\n <ion-button class=\"action-button\" expand=\"block\" (click)=\"handleExit()\">Continuar</ion-button>\n </div>\n </swiper-slide>\n </swiper-container>\n\n <div class=\"sdk-metag-version\">{{ versionSDK }} {{ configEnv.show_label ? configEnv.env_name : '' }}</div>\n\n <ion-fab vertical=\"top\" horizontal=\"end\" slot=\"fixed\" *ngIf=\"showDebug\">\n <ion-fab-button class=\"sdk-metag-button-debug\" (click)=\"copyProccess()\">\n <ion-icon name=\"bug-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab>\n\n</ion-content>\n<!-- pantalla para cuando no exista internet -->\n<ion-content [style.display]=\"!hasInternet && !isInitCameraBlocked ? 'block' : 'none'\">\n <div class=\"sdk-metag-wrapper-no-internet\">\n <div class=\"sdk-metag-content-no-internet\">\n <h2 class=\"sdk-metag-title-no-internet\">Sin conexi\u00F3n</h2>\n <img src=\"assets/imagesIdvision/no-internet.svg\" alt=\"Sin conexi\u00F3n img\" class=\"sdk-metag-icon-no-internet\"/>\n <p class=\"sdk-metag-description-no-internet\">\n No pudimos cargar la p\u00E1gina. <br>\n Verifica tu internet y prueba de nuevo.\n </p>\n </div>\n </div>\n</ion-content>\n", styles: ["// ============================================\n// ESTILOS AISLADOS DEL SDK - NO AFECTAN AL PADRE\n// ============================================\n// Usamos :host para encapsular todo dentro del componente\n// y evitar que los estilos globales del padre nos afecten\n\n:host {\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n\n // Reset de estilos globales del padre\n * {\n box-sizing: border-box;\n }\n}\n\n.sdk-metag-content {\n padding: 10px;\n align-items: center;\n justify-content: center;\n height: 90vh;\n background-color: #fff;\n font-size: 18px;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n// Cuando es simpleProcess, levanta el contenido un 10%\n.sdk-metag-content-simple-process {\n margin-top: 10vh;\n height: 90vh;\n}\n\n.sdk-metag-h-title {\n font-size: 1.5em;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n margin-top: 20px;\n}\n\n:host p {\n font-size: 1em;\n color: #666;\n text-align: center;\n margin: 0;\n}\n\n:host ion-grid {\n margin-top: 20px;\n}\n\n:host ion-row {\n margin: 15px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n:host ion-col {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n}\n\n:host ion-icon {\n font-size: 3em;\n color: #ff8c00;\n margin-bottom: 10px;\n}\n\n.sdk-metag-container-text {\n text-align: justify !important;\n width: 180px;\n}\n\n:host p {\n text-align: start;\n}\n\n.sdk-metag-p-center {\n text-align: center;\n}\n\n.sdk-metag-p-justify {\n text-align: start;\n}\n\n.sdk-metag-head {\n padding: 20px;\n margin-top: 20px;\n margin-bottom: 80px;\n}\n\n\n.sdk-metag-verify-container {\n // padding: 60px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 40%; // Ocupa todo el espacio disponible en el ion-content\n text-align: center;\n //background-color: black;\n}\n\n.sdk-metag-fixed-footer {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 0px 10px 25px 10px;\n // background-color: black; // Color de fondo, opcional\n // box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); // Sombra suave para que resalte\n\n ion-button {\n width: 90%;\n max-width: 300px;\n margin: 0 auto;\n background-color: #ffcc00;\n color: #ffffff;\n font-weight: bold;\n border-radius: 20px;\n\n &:hover {\n background-color: #ffb300;\n }\n\n &:active {\n background-color: #e6a800;\n }\n }\n}\n\n.sdk-metag-dpi-container {\n display: flex;\n //width: 100%;\n justify-content: center;\n align-items: center;\n height: 45vh;\n img {\n width: 90%;\n transform: rotate(270deg);\n }\n}\n\n.sdk-metag-dpi-image {\n width: 200px;\n}\n\n.sdk-metag-image-container {\n width: 100px;\n max-width: 90px;\n}\n\n.sdk-metag-col-confirmation {\n margin-top: 100px;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n /* Ajusta el espacio entre los elementos */\n}\n\n.sdk-metag-image-item {\n margin-top: 50px;\n padding-top: 70px;\n}\n\n.sdk-metag-font-confirmation {\n font-size: 26px;\n text-align: center;\n // color: #005da9;\n color: #82298F;\n font-weight: bold;\n}\n\n\n.sdk-metag-rounded-input {\n margin-top: 15px;\n background-color: #f4f6fc;\n /* Color de fondo suave */\n border-radius: 10px;\n /* Bordes redondeados */\n padding: 5px 5px;\n /* Espaciado interno */\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n /* Sombra suave */\n --ion-border-color: transparent;\n /* Quita cualquier borde por defecto */\n}\n\n:host ion-input {\n text-align: center;\n color: #F38301;\n --padding-start: 8px;\n}\n\n:host .sdk-metag-custom-footer {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 10px;\n display: flex;\n justify-content: space-between;\n background-color: #ffffff;\n}\n\n:host .sdk-metag-custom-footer ion-button {\n flex: 0 0 48%;\n}\n\n:host .sdk-metag-custom-footer .sdk-metag-left-button {\n max-width: 140px;\n color: black;\n --background: white;\n --color: #82298F;\n --border-radius: 20px;\n --border-color: white;\n margin-right: auto;\n --box-shadow: 0 2px 6px 0 rgb(0, 0, 0, 0.0);\n}\n\n:host .sdk-metag-custom-footer .sdk-metag-right-button {\n margin-left: auto;\n}\n\n.sdk-metag-tutorial-head {\n padding-top: 50px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: black;\n}\n\n.sdk-metag-center-container {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 60vh;\n /* Ajusta este valor si quieres m\u00E1s o menos espacio vertical */\n width: 100%;\n}\n\n.sdk-metag-tutorial-title {\n text-align: center;\n}\n\n.sdk-metag-rounded-input ion-input {\n font-size: 14px;\n /* Tama\u00F1o de texto */\n color: #333;\n /* Color del texto */\n}\n\n.sdk-metag-rounded-input::part(native) {\n background: transparent;\n /* Fondo transparente para evitar conflictos */\n}\n\n.sdk-metag-p-info {\n font-weight: bold;\n color: #714e93\n}\n\n.sdk-metag-custom-button {\n --background: var(--purple-primary, #82298F) !important;\n --background-hover: var(--purple-secondary, #2b0d30) !important;\n --background-activated: var(--purple-secondary, #2b0d30) !important;\n --color: #ffffff !important;\n --border-radius: 20px !important;\n --padding-top: 10px !important;\n --padding-bottom: 10px !important;\n --box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.25) !important;\n text-transform: none;\n pointer-events: auto;\n\n}\n\n//blur effect\n\n.sdk-metag-blur-effect {\n filter: blur(5px);\n pointer-events: none;\n}\n\n.sdk-metag-blur-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.7);\n z-index: 999;\n filter: blur(5px);\n}\n\n.sdk-metag-boton-personalizado {\n background-color: #4caf50;\n /* Verde, por ejemplo */\n color: white;\n font-size: 16px;\n}\n\n.sdk-metag-version {\n position: fixed;\n bottom: 10px;\n right: 10px;\n font-size: 12px;\n z-index: 1000;\n background: #f4f6fc !important;\n padding: 10px 15px !important;\n border-radius: 20px !important;\n}\n\n.sdk-metag-button-debug {\n --background: #ff4081;\n --color: #fff;\n}\n\n\n.sdk-metag-wrapper-no-internet {\n background-color: #fff;\n height: 100vh;\n display: flex;\n justify-content: center; /* centra en eje vertical */\n align-items: center; /* centra en eje horizontal */\n padding: 40px;\n background-image: url('assets/imagesIdvision/background.png') !important;\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n}\n\n.sdk-metag-content-no-internet {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: 16px;\n}\n\n.sdk-metag-title-no-internet {\n color: #000;\n font-size: 32px;\n font-weight: bold;\n}\n\n.sdk-metag-icon-no-internet {\n width: 125px;\n display: block;\n margin-top: 25px;\n}\n\n.sdk-metag-description-no-internet {\n margin-top: 25px;\n font-size: 22px;\n color: #000;\n line-height: 1.5;\n text-align: center;\n}\n\n.sdk-metag-no-border {\n --border-width: 0 !important;\n}\n\n.sdk-metag-confirmation-screen {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 80vh; // Se integra al 80% de la vista\n padding: 25px;\n box-sizing: border-box;\n background-image: url('assets/imagesIdvision/background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n background-color: white;\n gap: 20px; // Espacio entre elementos\n}\n\n.sdk-metag-image-confirmation {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n}\n\n.sdk-metag-image-confirmation img {\n max-width: 300px; // Reducido de 500px a 300px\n width: 40%; // Reducido de 80% a 50%\n height: auto;\n}\n\n.sdk-metag-button-container {\n width: 100%;\n display: flex;\n justify-content: center;\n padding: 0 10px;\n\n ion-button {\n width: 90%;\n max-width: 300px;\n }\n}\n\n\n.sdk-metag-close-button {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 1000;\n font-size: 15px;\n --color: #888;\n}\n\n.sdk-metag-p-margin {\n margin-top: 50px !important;\n}\n\n.content {\n background-color: #ffffff;\n --background: #ffffff;\n}\n\n/* HEAD */\n.head {\n padding: 20px;\n}\n\n.head-title {\n font-size: 23px;\n font-weight: bold;\n color: #F38301;\n text-align: center;\n}\n\n.description {\n text-align: center;\n margin-top: 25px;\n font-size: 14px;\n margin-bottom: 25px;\n}\n\n.head-subtitle {\n text-align: justify;\n margin-top: 25px;\n font-size: 14px;\n}\n\n.head-dpi {\n margin-top: 25px;\n //background-color: #f4f6fc;\n border-radius: 10px;\n --ion-border-color: transparent;\n //padding: 5px 5px;\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n --background: #f4f6fc !important;\n\n ion-input {\n text-align: center;\n color: #F38301;\n font-weight: 500;\n font-size: 19px;\n }\n}\n\n.instructions {\n}\n\n.instruction {\n margin: 0 !important;\n}\n\n.instruction-img {\n width: 100px;\n max-width: 100px;\n}\n\n.instruction-description {\n font-size: 13px;\n text-align: justify;\n padding-right: 15px;\n}\n\n.action-button {\n width: 300px;\n max-width: 300px;\n margin: 25px auto;\n --background: #82298F;\n --color: #ffffff;\n font-weight: bold;\n --border-radius: 20px;\n --box-shadow: none;\n}\n\n.exit-button {\n --background: transparent !important;\n --color: #F38301 !important;\n}\n\n.action-button:hover {\n --background: #82298F;\n}\n\n.action-button:active {\n --background: #82298F;\n}\n\n/* Contenedor padre */\n.card-wrapper {\n perspective: 1000px;\n //margin: 40px;\n margin: 25px;\n}\n\n/* Tarjeta */\n.card {\n position: relative;\n width: 100%;\n height: 350px;\n transform-style: preserve-3d;\n transition: transform 1s ease-in-out;\n cursor: pointer;\n}\n\n/* Cuando hace flip */\n.card.flip {\n transform: rotateY(180deg);\n}\n\n/* Lados */\n.side {\n position: absolute;\n width: 100%;\n height: 100%;\n backface-visibility: hidden;\n\n img {\n transform: rotate(270deg);\n width: 100%;\n object-fit: contain;\n }\n}\n\n.front {\n z-index: 2;\n}\n\n.back {\n transform: rotateY(180deg);\n}\n\n.avatar-wrapper{\n width:100%;\n display:flex;\n justify-content:center;\n margin-bottom:20px;\n}\n\n.avatar-container{\n position:relative;\n width:300px;\n height:300px;\n margin-bottom: 25px;\n}\n\n.avatar{\n width:100%;\n height:100%;\n border-radius:50%;\n object-fit:cover;\n padding: 35px;\n}\n\n.lottie-container{\n position:absolute;\n inset:0;\n}\n\nion-progress-bar{\n height:7px;\n border-radius:10px;\n --progress-background: #F38301;\n}\n\n.slide-six {\n}\n\n\n.status-container {\n text-align: center !important;\n margin-top: 20px;\n min-height: 30px;\n}\n\n.status-text {\n text-align: center !important;\n color: #444;\n font-size: 14px !important;\n opacity: 0;\n transform: translateY(10px);\n transition: all .4s ease;\n}\n\n.status-text.show {\n opacity: 1;\n transform: translateY(0);\n}\n\n.button-success {\n animation: checkPop 0.4s ease;\n}\n\n@keyframes checkPop{\n\n 0%{\n transform: scale(0);\n opacity:0;\n }\n\n 60%{\n transform: scale(1.2);\n }\n\n 100%{\n transform: scale(1);\n opacity:1;\n }\n\n}\n"] }]
1532
+ }], () => [{ type: i1.ModalController }, { type: i1.AlertController }, { type: i1.Platform }, { type: i2.ModalDpiServices }, { type: i3.SdkCommunicationService }, { type: i1.NavController }, { type: i0.ChangeDetectorRef }, { type: i1.ToastController }, { type: i1.LoadingController }, { type: i4.ConfigurationService }, { type: i5.ValidationService }, { type: i6.NavigationService }, { type: i7.ProcessingService }, { type: i8.DpiService }, { type: i0.ElementRef }, { type: i9.VirtualCameraDetectionService }], { dpi: [{
1396
1533
  type: ViewChild,
1397
1534
  args: ['dpi', { static: false }]
1398
1535
  }], swiperContainerRef: [{
@@ -1402,6 +1539,8 @@ export class IdVisionComponent {
1402
1539
  type: Input
1403
1540
  }], dpiCode: [{
1404
1541
  type: Input
1542
+ }], dpiCodeSecond: [{
1543
+ type: Input
1405
1544
  }], connection: [{
1406
1545
  type: Input
1407
1546
  }], apikey: [{
@@ -1411,5 +1550,5 @@ export class IdVisionComponent {
1411
1550
  }], validationConfig: [{
1412
1551
  type: Input
1413
1552
  }] }); })();
1414
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent", filePath: "src\\app\\pages\\id-vision\\id-vision.component.ts", lineNumber: 55 }); })();
1553
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(IdVisionComponent, { className: "IdVisionComponent" }); })();
1415
1554
  //# sourceMappingURL=id-vision.component.js.map