metag-sdk-ionic 1.2.11 → 1.3.0-security

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/assets/backup/Dpi-Front.webm +0 -0
  2. package/dist/assets/backup/Dpi-back.webm +0 -0
  3. package/dist/assets/icon/favicon.png +0 -0
  4. package/dist/assets/icons/dpi-error.svg +9 -9
  5. package/dist/assets/icons/video-error.svg +9 -9
  6. package/dist/assets/imagesIdVision/56.png +0 -0
  7. package/dist/assets/imagesIdVision/57.png +0 -0
  8. package/dist/assets/imagesIdVision/Animacion-de-colocacion-de-DPI.webm +0 -0
  9. package/dist/assets/imagesIdVision/Animacion-de-como-tomar-foto-DPI.webm +0 -0
  10. package/dist/assets/imagesIdVision/Dpi-back.mp4 +0 -0
  11. package/dist/assets/imagesIdVision/Dpi-front-video.mp4 +0 -0
  12. package/dist/assets/imagesIdVision/Foco.png +0 -0
  13. package/dist/assets/imagesIdVision/Selfie-rostro.png +0 -0
  14. package/dist/assets/imagesIdVision/acuerdo-video-selfie.png +0 -0
  15. package/dist/assets/imagesIdVision/backDpiRegister.png +0 -0
  16. package/dist/assets/imagesIdVision/background.png +0 -0
  17. package/dist/assets/imagesIdVision/blue-check.png +0 -0
  18. package/dist/assets/imagesIdVision/documentsImage.png +0 -0
  19. package/dist/assets/imagesIdVision/frontDpiRegister.png +0 -0
  20. package/dist/assets/imagesIdVision/icon/favicon.png +0 -0
  21. package/dist/assets/imagesIdVision/icons/dpi-error.svg +9 -9
  22. package/dist/assets/imagesIdVision/icons/video-error.svg +9 -9
  23. package/dist/assets/imagesIdVision/no-internet.svg +3 -3
  24. package/dist/assets/imagesIdVision/overlay_container.png +0 -0
  25. package/dist/assets/imagesIdVision/rostroImage.png +0 -0
  26. package/dist/assets/imagesIdVision/shapes.svg +1 -1
  27. package/dist/assets/imagesIdVision/voiceImage.png +0 -0
  28. package/dist/assets/shapes.svg +1 -1
  29. package/dist/index.d.ts +0 -1
  30. package/dist/index.js +0 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/src/app/app-routing.module.js +5 -5
  33. package/dist/src/app/app-routing.module.js.map +1 -1
  34. package/dist/src/app/app.component.js +2 -2
  35. package/dist/src/app/app.module.d.ts +2 -3
  36. package/dist/src/app/app.module.js +3 -5
  37. package/dist/src/app/app.module.js.map +1 -1
  38. package/dist/src/app/components/custom-button/custom-button.component.js +3 -3
  39. package/dist/src/app/home/home.page.js +3 -3
  40. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.d.ts +7 -0
  41. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js +25 -0
  42. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-routing.module.js.map +1 -0
  43. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.d.ts +5 -0
  44. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js +58 -0
  45. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video-step-guide/acuerdo-video-step-guide.component.js.map +1 -0
  46. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.d.ts +11 -0
  47. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js +35 -0
  48. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.module.js.map +1 -0
  49. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.d.ts +80 -0
  50. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js +640 -0
  51. package/dist/src/app/pages/id-vision/acuerdo-video/acuerdo-video.page.js.map +1 -0
  52. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.d.ts +9 -0
  53. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js +20 -0
  54. package/dist/src/app/pages/id-vision/acuerdo-video/shared-components.module.js.map +1 -0
  55. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.d.ts +32 -17
  56. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js +246 -122
  57. package/dist/src/app/pages/id-vision/components/camara-acuerdo-video/camara-acuerdo.video.component.js.map +1 -1
  58. package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js +33 -32
  59. package/dist/src/app/pages/id-vision/components/camara-video-selfie/camara-video-selfie.component.js.map +1 -1
  60. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.d.ts +12 -0
  61. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js +66 -0
  62. package/dist/src/app/pages/id-vision/components/camera-security-block/camera-security-block.component.js.map +1 -0
  63. package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js +23 -32
  64. package/dist/src/app/pages/id-vision/components/camera-with-overlay/camera-with-overlay.component.js.map +1 -1
  65. package/dist/src/app/pages/id-vision/components/custom-slide/custom-slide.component.js +3 -3
  66. package/dist/src/app/pages/id-vision/components/direct-photo-selfie/direct-photo-selfie.component.js +3 -3
  67. package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js +4 -4
  68. package/dist/src/app/pages/id-vision/components/message-modal/message-modal.component.js.map +1 -1
  69. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.d.ts +3 -0
  70. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js +57 -21
  71. package/dist/src/app/pages/id-vision/components/photo-selfie-camera/photo-selfie-camera.component.js.map +1 -1
  72. package/dist/src/app/pages/id-vision/components/simple-acuerdo-video/simple-acuerdo-video.component.js +3 -3
  73. package/dist/src/app/pages/id-vision/dpi/front-dpi/front-dpi.component.js +2 -2
  74. package/dist/src/app/pages/id-vision/id-vision.component.d.ts +36 -14
  75. package/dist/src/app/pages/id-vision/id-vision.component.js +547 -410
  76. package/dist/src/app/pages/id-vision/id-vision.component.js.map +1 -1
  77. package/dist/src/app/pages/id-vision/id-vision.module.js +2 -9
  78. package/dist/src/app/pages/id-vision/id-vision.module.js.map +1 -1
  79. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.d.ts +18 -0
  80. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js +43 -0
  81. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video-dynamic.service.js.map +1 -0
  82. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.d.ts +10 -0
  83. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js +29 -0
  84. package/dist/src/app/pages/id-vision/services/acuerdo-video/acuerdo-video.service.js.map +1 -0
  85. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.d.ts +1 -1
  86. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js +2 -2
  87. package/dist/src/app/pages/id-vision/services/configuration/configuration.service.js.map +1 -1
  88. package/dist/src/app/pages/id-vision/services/decrypt-text.service.d.ts +10 -0
  89. package/dist/src/app/pages/id-vision/services/decrypt-text.service.js +23 -0
  90. package/dist/src/app/pages/id-vision/services/decrypt-text.service.js.map +1 -0
  91. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.d.ts +16 -5
  92. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js +124 -60
  93. package/dist/src/app/pages/id-vision/services/dpi/dpi-service.service.js.map +1 -1
  94. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.d.ts +23 -0
  95. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js +44 -0
  96. package/dist/src/app/pages/id-vision/services/encrypt/encrypt.service.js.map +1 -0
  97. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.d.ts +22 -0
  98. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js +45 -0
  99. package/dist/src/app/pages/id-vision/services/facial-comparison/facial-comparison.service.js.map +1 -0
  100. package/dist/src/app/pages/id-vision/services/processing/processing.service.d.ts +7 -4
  101. package/dist/src/app/pages/id-vision/services/processing/processing.service.js +75 -46
  102. package/dist/src/app/pages/id-vision/services/processing/processing.service.js.map +1 -1
  103. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.d.ts +14 -0
  104. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js +72 -0
  105. package/dist/src/app/pages/id-vision/services/security/virtual-camera-detection.service.js.map +1 -0
  106. package/dist/src/app/pages/id-vision/services/validation/validation.service.d.ts +2 -0
  107. package/dist/src/app/pages/id-vision/services/validation/validation.service.js +21 -5
  108. package/dist/src/app/pages/id-vision/services/validation/validation.service.js.map +1 -1
  109. package/dist/src/app/pages/slides/acuerdo-video/acuerdo-video.component.js +1 -1
  110. package/dist/src/app/pages/slides/dpi-back/slide2.component.js +3 -3
  111. package/dist/src/app/pages/slides/dpi-front/slide1.component.js +3 -3
  112. package/dist/src/app/pages/slides/photo-selfie/photo-selfie.component.js +1 -1
  113. package/dist/src/app/pages/slides/slide1/slide1.component.d.ts +10 -10
  114. package/dist/src/app/pages/slides/slide1/slide1.component.js +39 -39
  115. package/dist/src/app/pages/slides/slide2/slide2.component.d.ts +8 -8
  116. package/dist/src/app/pages/slides/slide2/slide2.component.js +17 -17
  117. package/dist/src/app/pages/slides/slide3/slide3.component.d.ts +8 -8
  118. package/dist/src/app/pages/slides/slide3/slide3.component.js +17 -17
  119. package/dist/src/app/pages/slides/slide4/slide4.component.js +2 -2
  120. package/dist/src/app/pages/slides/video-selfie/slide3.component.js +35 -35
  121. package/dist/src/environments/environment.d.ts +2 -0
  122. package/dist/src/environments/environment.js +3 -1
  123. package/dist/src/environments/environment.js.map +1 -1
  124. package/package.json +72 -62
  125. package/src/app/app.component.scss +0 -0
  126. package/src/theme/variables.scss +24 -24
@@ -0,0 +1,640 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, ViewChild } from '@angular/core';
3
+ import { IonicModule } from '@ionic/angular';
4
+ import { SharedComponentsModule } from './shared-components.module';
5
+ import { ScreenBrightness } from "@capacitor-community/screen-brightness";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ionic/angular";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "./acuerdo-video-step-guide/acuerdo-video-step-guide.component";
10
+ const _c0 = ["videoElement"];
11
+ const _c1 = a0 => ({ "is-hidden": a0 });
12
+ const _c2 = () => ({ color: "#16a34a" });
13
+ const _c3 = () => ({ color: "#dc2626" });
14
+ function AcuerdoVideoPage_section_1_Template(rf, ctx) { if (rf & 1) {
15
+ const _r1 = i0.ɵɵgetCurrentView();
16
+ i0.ɵɵelementStart(0, "section", 5)(1, "div", 6)(2, "ion-button", 7);
17
+ i0.ɵɵlistener("click", function AcuerdoVideoPage_section_1_Template_ion_button_click_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeScreen()); });
18
+ i0.ɵɵelement(3, "ion-icon", 8);
19
+ i0.ɵɵelementEnd()();
20
+ i0.ɵɵelementStart(4, "h1", 9);
21
+ i0.ɵɵtext(5, " Acuerdo de video ");
22
+ i0.ɵɵelementEnd();
23
+ i0.ɵɵelement(6, "app-acuerdo-video-step-guide");
24
+ i0.ɵɵelementStart(7, "ion-button", 10);
25
+ i0.ɵɵlistener("click", function AcuerdoVideoPage_section_1_Template_ion_button_click_7_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.goToRecordingStep()); });
26
+ i0.ɵɵtext(8, " Estoy listo ");
27
+ i0.ɵɵelementEnd()();
28
+ } }
29
+ function AcuerdoVideoPage_section_2_div_8_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵelementStart(0, "div", 28);
31
+ i0.ɵɵelement(1, "ion-spinner", 29);
32
+ i0.ɵɵelementStart(2, "span");
33
+ i0.ɵɵtext(3, "Preparando c\u00E1mara...");
34
+ i0.ɵɵelementEnd()();
35
+ } }
36
+ function AcuerdoVideoPage_section_2_div_9_Template(rf, ctx) { if (rf & 1) {
37
+ i0.ɵɵelementStart(0, "div", 30);
38
+ i0.ɵɵelement(1, "span", 31);
39
+ i0.ɵɵelementStart(2, "span", 32);
40
+ i0.ɵɵtext(3);
41
+ i0.ɵɵelementEnd()();
42
+ } if (rf & 2) {
43
+ const ctx_r1 = i0.ɵɵnextContext(2);
44
+ i0.ɵɵadvance(3);
45
+ i0.ɵɵtextInterpolate1("00:", ctx_r1.timeRemaining < 10 ? "0" + ctx_r1.timeRemaining : ctx_r1.timeRemaining, "");
46
+ } }
47
+ function AcuerdoVideoPage_section_2_div_10_ng_container_1_Template(rf, ctx) { if (rf & 1) {
48
+ i0.ɵɵelementContainerStart(0);
49
+ i0.ɵɵelementStart(1, "div", 35);
50
+ i0.ɵɵelement(2, "ion-spinner", 36);
51
+ i0.ɵɵelementEnd();
52
+ i0.ɵɵelementContainerEnd();
53
+ } }
54
+ function AcuerdoVideoPage_section_2_div_10_ng_template_2_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 35);
56
+ i0.ɵɵelement(1, "ion-icon", 37);
57
+ i0.ɵɵelementEnd();
58
+ } if (rf & 2) {
59
+ const ctx_r1 = i0.ɵɵnextContext(3);
60
+ i0.ɵɵadvance();
61
+ i0.ɵɵproperty("name", ctx_r1.validationState === "success" ? "checkmark-circle" : "close-circle")("ngStyle", ctx_r1.validationState === "success" ? i0.ɵɵpureFunction0(2, _c2) : i0.ɵɵpureFunction0(3, _c3));
62
+ } }
63
+ function AcuerdoVideoPage_section_2_div_10_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "div", 33);
65
+ i0.ɵɵtemplate(1, AcuerdoVideoPage_section_2_div_10_ng_container_1_Template, 3, 0, "ng-container", 34)(2, AcuerdoVideoPage_section_2_div_10_ng_template_2_Template, 2, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
66
+ i0.ɵɵelementEnd();
67
+ } if (rf & 2) {
68
+ const resultState_r3 = i0.ɵɵreference(3);
69
+ const ctx_r1 = i0.ɵɵnextContext(2);
70
+ i0.ɵɵadvance();
71
+ i0.ɵɵproperty("ngIf", ctx_r1.validationState === "validating")("ngIfElse", resultState_r3);
72
+ } }
73
+ function AcuerdoVideoPage_section_2_p_15_Template(rf, ctx) { if (rf & 1) {
74
+ i0.ɵɵelementStart(0, "p", 38);
75
+ i0.ɵɵtext(1);
76
+ i0.ɵɵelementEnd();
77
+ } if (rf & 2) {
78
+ const ctx_r1 = i0.ɵɵnextContext(2);
79
+ i0.ɵɵadvance();
80
+ i0.ɵɵtextInterpolate(ctx_r1.introPromptText);
81
+ } }
82
+ function AcuerdoVideoPage_section_2_ng_container_16_p_1_Template(rf, ctx) { if (rf & 1) {
83
+ i0.ɵɵelementStart(0, "p", 40);
84
+ i0.ɵɵtext(1);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ const line_r4 = ctx.$implicit;
88
+ const i_r5 = ctx.index;
89
+ const ctx_r1 = i0.ɵɵnextContext(3);
90
+ i0.ɵɵproperty("ngClass", ctx_r1.getLyricClass(i_r5));
91
+ i0.ɵɵadvance();
92
+ i0.ɵɵtextInterpolate1(" ", line_r4, " ");
93
+ } }
94
+ function AcuerdoVideoPage_section_2_ng_container_16_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementContainerStart(0);
96
+ i0.ɵɵtemplate(1, AcuerdoVideoPage_section_2_ng_container_16_p_1_Template, 2, 2, "p", 39);
97
+ i0.ɵɵelementContainerEnd();
98
+ } if (rf & 2) {
99
+ const ctx_r1 = i0.ɵɵnextContext(2);
100
+ i0.ɵɵadvance();
101
+ i0.ɵɵproperty("ngForOf", ctx_r1.scriptChunks);
102
+ } }
103
+ function AcuerdoVideoPage_section_2_div_17_span_1_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵelement(0, "span", 43);
105
+ } if (rf & 2) {
106
+ const bar_r6 = ctx.$implicit;
107
+ const ctx_r1 = i0.ɵɵnextContext(3);
108
+ i0.ɵɵstyleProp("height", ctx_r1.getWaveHeight(bar_r6), "px");
109
+ i0.ɵɵproperty("ngClass", ctx_r1.getWaveClass(bar_r6));
110
+ } }
111
+ function AcuerdoVideoPage_section_2_div_17_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelementStart(0, "div", 41);
113
+ i0.ɵɵtemplate(1, AcuerdoVideoPage_section_2_div_17_span_1_Template, 1, 3, "span", 42);
114
+ i0.ɵɵelementEnd();
115
+ } if (rf & 2) {
116
+ const ctx_r1 = i0.ɵɵnextContext(2);
117
+ i0.ɵɵadvance();
118
+ i0.ɵɵproperty("ngForOf", ctx_r1.waveformBars);
119
+ } }
120
+ function AcuerdoVideoPage_section_2_div_19_Template(rf, ctx) { if (rf & 1) {
121
+ const _r7 = i0.ɵɵgetCurrentView();
122
+ i0.ɵɵelementStart(0, "div", 44)(1, "ion-button", 45);
123
+ i0.ɵɵlistener("click", function AcuerdoVideoPage_section_2_div_19_Template_ion_button_click_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goToStepOne()); });
124
+ i0.ɵɵtext(2, " Continuar ");
125
+ i0.ɵɵelementEnd()();
126
+ } }
127
+ function AcuerdoVideoPage_section_2_div_20_Template(rf, ctx) { if (rf & 1) {
128
+ const _r8 = i0.ɵɵgetCurrentView();
129
+ i0.ɵɵelementStart(0, "div", 46)(1, "ion-button", 47);
130
+ i0.ɵɵlistener("click", function AcuerdoVideoPage_section_2_div_20_Template_ion_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.goToStepOne()); });
131
+ i0.ɵɵelement(2, "ion-icon", 48);
132
+ i0.ɵɵelementEnd();
133
+ i0.ɵɵelementStart(3, "ion-button", 49);
134
+ i0.ɵɵlistener("click", function AcuerdoVideoPage_section_2_div_20_Template_ion_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isRecording ? ctx_r1.stopRecording() : ctx_r1.recordVideo()); });
135
+ i0.ɵɵelement(4, "ion-icon", 50);
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵelement(5, "ion-button", 51);
138
+ i0.ɵɵelementEnd();
139
+ } if (rf & 2) {
140
+ const ctx_r1 = i0.ɵɵnextContext(2);
141
+ i0.ɵɵadvance(3);
142
+ i0.ɵɵproperty("disabled", ctx_r1.isInitializingCamera || !ctx_r1.isCameraReady || ctx_r1.isPreRecordingIntro);
143
+ i0.ɵɵadvance();
144
+ i0.ɵɵproperty("name", ctx_r1.isRecording ? "pause-outline" : "mic-outline");
145
+ } }
146
+ function AcuerdoVideoPage_section_2_Template(rf, ctx) { if (rf & 1) {
147
+ i0.ɵɵelementStart(0, "section", 11)(1, "header", 12)(2, "h1", 13);
148
+ i0.ɵɵtext(3, "Acuerdo de video");
149
+ i0.ɵɵelementEnd()();
150
+ i0.ɵɵelementStart(4, "div", 14)(5, "div", 15);
151
+ i0.ɵɵelement(6, "video", 16, 0);
152
+ i0.ɵɵtemplate(8, AcuerdoVideoPage_section_2_div_8_Template, 4, 0, "div", 17)(9, AcuerdoVideoPage_section_2_div_9_Template, 4, 1, "div", 18)(10, AcuerdoVideoPage_section_2_div_10_Template, 4, 2, "div", 19);
153
+ i0.ɵɵelementEnd();
154
+ i0.ɵɵelementStart(11, "div", 20)(12, "div", 21)(13, "span");
155
+ i0.ɵɵtext(14);
156
+ i0.ɵɵelementEnd()();
157
+ i0.ɵɵtemplate(15, AcuerdoVideoPage_section_2_p_15_Template, 2, 1, "p", 22)(16, AcuerdoVideoPage_section_2_ng_container_16_Template, 2, 1, "ng-container", 23);
158
+ i0.ɵɵelementEnd();
159
+ i0.ɵɵtemplate(17, AcuerdoVideoPage_section_2_div_17_Template, 2, 1, "div", 24);
160
+ i0.ɵɵelementEnd();
161
+ i0.ɵɵelementStart(18, "footer", 25);
162
+ i0.ɵɵtemplate(19, AcuerdoVideoPage_section_2_div_19_Template, 3, 0, "div", 26)(20, AcuerdoVideoPage_section_2_div_20_Template, 6, 2, "div", 27);
163
+ i0.ɵɵelementEnd()();
164
+ } if (rf & 2) {
165
+ const ctx_r1 = i0.ɵɵnextContext();
166
+ i0.ɵɵadvance(8);
167
+ i0.ɵɵproperty("ngIf", ctx_r1.isInitializingCamera || !ctx_r1.isCameraReady);
168
+ i0.ɵɵadvance();
169
+ i0.ɵɵproperty("ngIf", ctx_r1.isRecording);
170
+ i0.ɵɵadvance();
171
+ i0.ɵɵproperty("ngIf", ctx_r1.validationState === "validating" || ctx_r1.validationState === "success" || ctx_r1.validationState === "error");
172
+ i0.ɵɵadvance(2);
173
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(11, _c1, ctx_r1.isRecording || ctx_r1.isPreRecordingIntro))("ngStyle", ctx_r1.getReadChipStyles());
174
+ i0.ɵɵadvance(2);
175
+ i0.ɵɵtextInterpolate(ctx_r1.getReadChipMessage());
176
+ i0.ɵɵadvance();
177
+ i0.ɵɵproperty("ngIf", ctx_r1.isPreRecordingIntro);
178
+ i0.ɵɵadvance();
179
+ i0.ɵɵproperty("ngIf", ctx_r1.isRecording);
180
+ i0.ɵɵadvance();
181
+ i0.ɵɵproperty("ngIf", ctx_r1.isRecording);
182
+ i0.ɵɵadvance(2);
183
+ i0.ɵɵproperty("ngIf", ctx_r1.validationState === "success");
184
+ i0.ɵɵadvance();
185
+ i0.ɵɵproperty("ngIf", !ctx_r1.isRecording && ctx_r1.validationState === "idle" || ctx_r1.validationState === "error");
186
+ } }
187
+ export class AcuerdoVideoPage {
188
+ constructor(navController, changeDetector) {
189
+ this.navController = navController;
190
+ this.changeDetector = changeDetector;
191
+ this.scriptText = 'Acepto los términos y condiciones del crédito que estoy solicitando en Fundación Génesis Empresarial.';
192
+ this.introPromptText = 'Repite lo siguiente...';
193
+ this.scriptChunks = [
194
+ 'Acepto los términos y condiciones',
195
+ 'del crédito que estoy solicitando',
196
+ 'en Fundación Génesis Empresarial.'
197
+ ];
198
+ this.scriptWordCounts = this.scriptChunks.map((chunk) => this.countWords(chunk));
199
+ this.totalScriptWords = this.scriptWordCounts.reduce((total, count) => total + count, 0);
200
+ this.waveformBars = Array.from({ length: 28 }, (_, i) => i);
201
+ this.waveformPattern = [26, 34, 22, 40, 30, 18, 36, 24, 44, 28, 20, 38, 32, 16];
202
+ this.currentStep = 1;
203
+ this.currentScriptLine = this.scriptChunks[0];
204
+ this.activeScriptIndex = 0;
205
+ this.progressValue = 0;
206
+ this.isRecording = false;
207
+ this.timeRemaining = 30;
208
+ this.isInitializingCamera = false;
209
+ this.isCameraReady = false;
210
+ this.recordedVideoUrl = null;
211
+ this.lastRecordedFile = null;
212
+ this.validationState = 'idle';
213
+ this.isPreRecordingIntro = false;
214
+ this.recordingDurationSeconds = 15;
215
+ this.videoBitsPerSecond = 600000;
216
+ this.isIOS = false;
217
+ this.introAnimationDurationMs = 3000;
218
+ this.recordedChunks = [];
219
+ this.stream = null;
220
+ this.mediaRecorder = null;
221
+ this.defaultBrightness = 0;
222
+ this.logTag = '[AcuerdoVideoPage]';
223
+ this.isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
224
+ }
225
+ ngAfterViewInit() {
226
+ // La cámara se inicializa al entrar al paso 2.
227
+ }
228
+ ionViewDidEnter() {
229
+ if (this.currentStep === 2) {
230
+ setTimeout(() => void this.initCamera(), 0);
231
+ }
232
+ }
233
+ ngOnDestroy() {
234
+ this.clearAllTimers();
235
+ this.stopCameraTracks();
236
+ this.clearRecordedVideoUrl();
237
+ this.restoreBrightness();
238
+ }
239
+ async goToRecordingStep() {
240
+ this.currentStep = 2;
241
+ this.changeDetector.detectChanges();
242
+ await new Promise((resolve) => setTimeout(resolve, 0));
243
+ await this.initCamera();
244
+ this.boostBrightness();
245
+ }
246
+ async initCamera() {
247
+ if (this.stream || this.isInitializingCamera || !this.videoElement?.nativeElement)
248
+ return;
249
+ this.isInitializingCamera = true;
250
+ console.log(`${this.logTag} initCamera start`, {
251
+ ua: navigator.userAgent,
252
+ mediaDevices: !!navigator.mediaDevices,
253
+ hasGetUserMedia: !!navigator.mediaDevices?.getUserMedia,
254
+ hasMediaRecorder: typeof MediaRecorder !== 'undefined'
255
+ });
256
+ try {
257
+ if (typeof MediaRecorder === 'undefined') {
258
+ throw new Error('MediaRecorder no está soportado en este dispositivo/navegador');
259
+ }
260
+ const constraints = {
261
+ video: {
262
+ width: { ideal: 1080 },
263
+ height: { ideal: 1080 },
264
+ facingMode: 'user'
265
+ },
266
+ audio: true
267
+ };
268
+ this.stream = await navigator.mediaDevices.getUserMedia(constraints);
269
+ const tracks = this.stream.getTracks().map((track) => ({
270
+ kind: track.kind,
271
+ label: track.label,
272
+ enabled: track.enabled,
273
+ muted: track.muted,
274
+ readyState: track.readyState
275
+ }));
276
+ console.log(`${this.logTag} getUserMedia success`, { tracks });
277
+ this.videoElement.nativeElement.srcObject = this.stream;
278
+ this.videoElement.nativeElement.muted = true;
279
+ this.videoElement.nativeElement.setAttribute('playsinline', 'true');
280
+ this.videoElement.nativeElement.onloadedmetadata = () => {
281
+ console.log(`${this.logTag} video metadata loaded`, {
282
+ readyState: this.videoElement.nativeElement.readyState
283
+ });
284
+ this.isCameraReady = true;
285
+ this.changeDetector.detectChanges();
286
+ };
287
+ await this.videoElement.nativeElement.play();
288
+ console.log(`${this.logTag} video play success`);
289
+ }
290
+ catch (error) {
291
+ const err = error;
292
+ console.error(`${this.logTag} initCamera error`, {
293
+ name: err?.name,
294
+ message: err?.message,
295
+ code: err?.code,
296
+ full: error
297
+ });
298
+ }
299
+ finally {
300
+ this.isInitializingCamera = false;
301
+ console.log(`${this.logTag} initCamera end`, {
302
+ isCameraReady: this.isCameraReady,
303
+ hasStream: !!this.stream
304
+ });
305
+ this.changeDetector.detectChanges();
306
+ }
307
+ }
308
+ async recordVideo() {
309
+ if (this.isRecording || this.isPreRecordingIntro || !this.stream || !this.isCameraReady)
310
+ return;
311
+ this.isPreRecordingIntro = true;
312
+ this.changeDetector.detectChanges();
313
+ this.clearIntroTimer();
314
+ this.introTimeoutId = setTimeout(() => {
315
+ this.isPreRecordingIntro = false;
316
+ this.startVideoRecord();
317
+ }, this.introAnimationDurationMs);
318
+ }
319
+ startVideoRecord() {
320
+ if (!this.stream || this.isRecording)
321
+ return;
322
+ this.recordedChunks = [];
323
+ this.validationState = 'idle';
324
+ this.isRecording = true;
325
+ this.timeRemaining = this.recordingDurationSeconds;
326
+ this.progressValue = 0;
327
+ this.activeScriptIndex = 0;
328
+ this.currentScriptLine = this.scriptChunks[0];
329
+ this.changeDetector.detectChanges();
330
+ const mimeType = this.resolveMimeType();
331
+ console.log(`${this.logTag} startVideoRecord`, {
332
+ mimeType,
333
+ isIOS: this.isIOS
334
+ });
335
+ const options = mimeType
336
+ ? { mimeType, videoBitsPerSecond: this.videoBitsPerSecond }
337
+ : { videoBitsPerSecond: this.videoBitsPerSecond };
338
+ this.mediaRecorder = new MediaRecorder(this.stream, options);
339
+ this.mediaRecorder.ondataavailable = (event) => {
340
+ console.log(`${this.logTag} ondataavailable`, { size: event.data?.size ?? 0 });
341
+ if (event.data.size > 0)
342
+ this.recordedChunks.push(event.data);
343
+ };
344
+ this.mediaRecorder.onerror = (event) => {
345
+ console.error(`${this.logTag} mediaRecorder error`, event);
346
+ };
347
+ this.mediaRecorder.onstop = () => {
348
+ console.log(`${this.logTag} onstop`, { chunks: this.recordedChunks.length });
349
+ if (this.recordedChunks.length === 0)
350
+ return;
351
+ const outputType = mimeType || (this.isIOS ? 'video/mp4' : 'video/webm');
352
+ const extension = outputType.includes('mp4') ? 'mp4' : 'webm';
353
+ const videoBlob = new Blob(this.recordedChunks, { type: outputType });
354
+ const file = this.blobToFile(videoBlob, `acuerdo-video-test.${extension}`);
355
+ this.lastRecordedFile = file;
356
+ if (this.backFunction) {
357
+ void this.backFunction(file);
358
+ return;
359
+ }
360
+ this.clearRecordedVideoUrl();
361
+ this.recordedVideoUrl = URL.createObjectURL(videoBlob);
362
+ this.startValidationSimulation();
363
+ this.changeDetector.detectChanges();
364
+ };
365
+ this.mediaRecorder.start(100);
366
+ this.clearRecordingTimer();
367
+ this.recordingIntervalId = setInterval(() => {
368
+ this.timeRemaining--;
369
+ const elapsed = this.recordingDurationSeconds - this.timeRemaining;
370
+ const readingProgress = Math.min(elapsed / this.recordingDurationSeconds, 1);
371
+ this.progressValue = readingProgress;
372
+ this.activeScriptIndex = this.getScriptIndexByProgress(readingProgress);
373
+ this.currentScriptLine = this.scriptChunks[this.activeScriptIndex];
374
+ if (this.timeRemaining <= 0) {
375
+ this.stopRecording();
376
+ }
377
+ this.changeDetector.detectChanges();
378
+ }, 1000);
379
+ }
380
+ async stopRecording() {
381
+ if (this.mediaRecorder && this.isRecording) {
382
+ console.log(`${this.logTag} stopRecording`, { state: this.mediaRecorder.state });
383
+ this.mediaRecorder.stop();
384
+ this.isRecording = false;
385
+ this.clearRecordingTimer();
386
+ this.changeDetector.detectChanges();
387
+ }
388
+ }
389
+ async closeScreen() {
390
+ this.clearAllTimers();
391
+ await this.stopRecording();
392
+ this.stopCameraTracks();
393
+ if (this.closeRequested) {
394
+ await this.closeRequested();
395
+ return;
396
+ }
397
+ this.navController.back();
398
+ }
399
+ async goToStepOne() {
400
+ this.clearAllTimers();
401
+ await this.stopRecording();
402
+ this.stopCameraTracks();
403
+ this.clearRecordedVideoUrl();
404
+ this.validationState = 'idle';
405
+ this.progressValue = 0;
406
+ this.activeScriptIndex = 0;
407
+ this.currentScriptLine = this.scriptChunks[0];
408
+ this.timeRemaining = this.recordingDurationSeconds;
409
+ this.isCameraReady = false;
410
+ this.isInitializingCamera = false;
411
+ this.currentStep = 1;
412
+ this.changeDetector.detectChanges();
413
+ this.restoreBrightness();
414
+ }
415
+ retryFromError() {
416
+ this.validationState = 'idle';
417
+ this.progressValue = 0;
418
+ this.activeScriptIndex = 0;
419
+ this.currentScriptLine = this.scriptChunks[0];
420
+ this.timeRemaining = this.recordingDurationSeconds;
421
+ this.clearRecordedVideoUrl();
422
+ this.changeDetector.detectChanges();
423
+ }
424
+ resolveMimeType() {
425
+ if (typeof MediaRecorder === 'undefined' || typeof MediaRecorder.isTypeSupported !== 'function') {
426
+ return undefined;
427
+ }
428
+ const candidateTypes = this.isIOS
429
+ ? ['video/mp4', 'video/webm;codecs=vp9', 'video/webm']
430
+ : ['video/webm;codecs=vp9', 'video/webm', 'video/mp4'];
431
+ return candidateTypes.find((type) => MediaRecorder.isTypeSupported(type));
432
+ }
433
+ getScriptIndexByProgress(progress) {
434
+ const currentWord = Math.ceil(progress * this.totalScriptWords);
435
+ let accumulated = 0;
436
+ for (let index = 0; index < this.scriptWordCounts.length; index++) {
437
+ accumulated += this.scriptWordCounts[index];
438
+ if (currentWord <= accumulated)
439
+ return index;
440
+ }
441
+ return this.scriptChunks.length - 1;
442
+ }
443
+ getLyricClass(index) {
444
+ if (!this.isRecording)
445
+ return 'is-idle';
446
+ const diff = index - this.activeScriptIndex;
447
+ if (diff === 0)
448
+ return 'is-active';
449
+ if (diff === 1)
450
+ return 'is-next';
451
+ if (diff > 1)
452
+ return 'is-upcoming';
453
+ if (diff === -1)
454
+ return 'is-past-near';
455
+ return 'is-past';
456
+ }
457
+ getWaveHeight(index) {
458
+ return this.waveformPattern[index % this.waveformPattern.length];
459
+ }
460
+ getWaveClass(index) {
461
+ const activeBars = Math.floor(this.progressValue * this.waveformBars.length);
462
+ if (index < activeBars)
463
+ return 'is-filled';
464
+ if (index === activeBars && this.isRecording)
465
+ return 'is-current';
466
+ return 'is-pending';
467
+ }
468
+ getValidationMessage() {
469
+ if (this.validationState === 'validating') {
470
+ return 'Validando grabación...';
471
+ }
472
+ if (this.validationState === 'success') {
473
+ return 'Validación exitosa. Puedes regresar con el botón de atrás.';
474
+ }
475
+ if (this.validationState === 'error') {
476
+ return 'No se pudo validar. Puedes regresar con el botón de atrás.';
477
+ }
478
+ return '';
479
+ }
480
+ getReadChipMessage() {
481
+ if (this.validationState === 'success')
482
+ return 'Acuerdo validado exitosamente';
483
+ if (this.validationState === 'error')
484
+ return 'No se pudo validar el acuerdo.';
485
+ if (this.validationState === 'validating')
486
+ return 'Validando acuerdo...';
487
+ return 'Inicia la grabación y lee el acuerdo en voz alta';
488
+ }
489
+ getReadChipIcon() {
490
+ if (this.validationState === 'success')
491
+ return 'checkmark-circle';
492
+ if (this.validationState === 'error')
493
+ return 'close-circle';
494
+ if (this.validationState === 'validating')
495
+ return 'time-outline';
496
+ return 'alert-circle-outline';
497
+ }
498
+ getReadChipStyles() {
499
+ if (this.validationState === 'success') {
500
+ return {
501
+ color: '#166534',
502
+ background: '#dcfce7',
503
+ border: '1px solid #86efac'
504
+ };
505
+ }
506
+ if (this.validationState === 'error') {
507
+ return {
508
+ color: '#991b1b',
509
+ background: '#fee2e2',
510
+ border: '1px solid #fca5a5'
511
+ };
512
+ }
513
+ if (this.validationState === 'validating') {
514
+ return {
515
+ color: '#82298F',
516
+ background: '#fee2e2',
517
+ border: '1px solid #82298F'
518
+ };
519
+ }
520
+ return {};
521
+ }
522
+ getValidationStyles() {
523
+ if (this.validationState === 'success') {
524
+ return {
525
+ color: '#166534',
526
+ background: '#dcfce7',
527
+ border: '1px solid #86efac'
528
+ };
529
+ }
530
+ if (this.validationState === 'error') {
531
+ return {
532
+ color: '#991b1b',
533
+ background: '#fee2e2',
534
+ border: '1px solid #fca5a5'
535
+ };
536
+ }
537
+ return {
538
+ color: '#1e3a8a',
539
+ background: '#dbeafe',
540
+ border: '1px solid #93c5fd'
541
+ };
542
+ }
543
+ countWords(text) {
544
+ return text.trim().split(/\s+/).filter(Boolean).length;
545
+ }
546
+ blobToFile(blob, fileName) {
547
+ return new File([blob], fileName, { type: blob.type });
548
+ }
549
+ startValidationSimulation() {
550
+ this.clearValidationTimer();
551
+ this.validationState = 'validating';
552
+ this.validationTimeoutId = setTimeout(() => {
553
+ this.validationState = Math.random() > 0.35 ? 'success' : 'error';
554
+ this.changeDetector.detectChanges();
555
+ }, 1800);
556
+ }
557
+ stopCameraTracks() {
558
+ if (this.stream) {
559
+ this.stream.getTracks().forEach((track) => track.stop());
560
+ this.stream = null;
561
+ }
562
+ }
563
+ clearRecordingTimer() {
564
+ if (this.recordingIntervalId) {
565
+ clearInterval(this.recordingIntervalId);
566
+ this.recordingIntervalId = undefined;
567
+ }
568
+ }
569
+ clearAllTimers() {
570
+ this.clearRecordingTimer();
571
+ this.clearValidationTimer();
572
+ this.clearIntroTimer();
573
+ }
574
+ clearValidationTimer() {
575
+ if (this.validationTimeoutId) {
576
+ clearTimeout(this.validationTimeoutId);
577
+ this.validationTimeoutId = undefined;
578
+ }
579
+ }
580
+ clearIntroTimer() {
581
+ if (this.introTimeoutId) {
582
+ clearTimeout(this.introTimeoutId);
583
+ this.introTimeoutId = undefined;
584
+ }
585
+ }
586
+ clearRecordedVideoUrl() {
587
+ if (this.recordedVideoUrl) {
588
+ URL.revokeObjectURL(this.recordedVideoUrl);
589
+ this.recordedVideoUrl = null;
590
+ }
591
+ }
592
+ boostBrightness() {
593
+ try {
594
+ ScreenBrightness.getBrightness()
595
+ .then(async (brightness) => {
596
+ this.defaultBrightness = brightness.brightness;
597
+ await ScreenBrightness.setBrightness({ brightness: 1.0 });
598
+ });
599
+ }
600
+ catch { }
601
+ }
602
+ restoreBrightness() {
603
+ if (this.defaultBrightness === 0)
604
+ return;
605
+ try {
606
+ ScreenBrightness.setBrightness({ brightness: this.defaultBrightness }).then(() => null);
607
+ }
608
+ catch { }
609
+ }
610
+ static { this.ɵfac = function AcuerdoVideoPage_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AcuerdoVideoPage)(i0.ɵɵdirectiveInject(i1.NavController), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
611
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AcuerdoVideoPage, selectors: [["app-acuerdo-video-test"]], viewQuery: function AcuerdoVideoPage_Query(rf, ctx) { if (rf & 1) {
612
+ i0.ɵɵviewQuery(_c0, 5);
613
+ } if (rf & 2) {
614
+ let _t;
615
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.videoElement = _t.first);
616
+ } }, inputs: { backFunction: "backFunction", closeRequested: "closeRequested" }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 3, consts: [["videoElement", ""], ["resultState", ""], [1, "sdk-metag-acuerdo-content", 3, "fullscreen"], ["class", "sdk-metag-step-one", 4, "ngIf"], ["class", "sdk-metag-step-two", 4, "ngIf"], [1, "sdk-metag-step-one"], [2, "width", "100%", "display", "flex", "justify-content", "flex-end"], ["fill", "clear", 2, "width", "42px", "height", "42px", "--padding-start", "0", "--padding-end", "0", "--border-radius", "50%", "--background", "#f3e8ff", "--background-hover", "#e9d5ff", "--background-activated", "#ddd6fe", "--color", "#82298F", 3, "click"], ["slot", "icon-only", "name", "close-outline"], [1, "sdk-metag-title", 2, "animation", "sdk-metag-lyric-rise .45s ease both"], ["expand", "block", 1, "sdk-metag-primary-btn", 2, "animation", "sdk-metag-lyric-rise .6s ease both", "animation-delay", ".24s", 3, "click"], [1, "sdk-metag-step-two"], [1, "sdk-metag-player-header"], [1, "sdk-metag-title"], [1, "sdk-metag-player-card"], [1, "sdk-metag-camera-frame"], ["autoplay", "", "muted", "", "playsinline", ""], ["class", "sdk-metag-camera-overlay", 4, "ngIf"], ["class", "sdk-metag-camera-recording-chip", 4, "ngIf"], ["style", "position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(15,23,42,.34);backdrop-filter:blur(1px);", 4, "ngIf"], [1, "sdk-metag-lyrics-viewport"], [1, "sdk-metag-read-chip", 3, "ngClass", "ngStyle"], ["class", "sdk-metag-intro-line", 4, "ngIf"], [4, "ngIf"], ["class", "sdk-metag-waveform-progress", 4, "ngIf"], [1, "sdk-metag-player-footer"], ["style", "justify-items:center;margin-bottom:10px;", 4, "ngIf"], ["class", "sdk-metag-controls-row", 4, "ngIf"], [1, "sdk-metag-camera-overlay"], ["name", "crescent"], [1, "sdk-metag-camera-recording-chip"], [1, "sdk-metag-recording-dot"], [2, "margin-left", "10px"], [2, "position", "absolute", "inset", "0", "display", "flex", "align-items", "center", "justify-content", "center", "background", "rgba(15,23,42,.34)", "backdrop-filter", "blur(1px)"], [4, "ngIf", "ngIfElse"], [2, "width", "68%", "aspect-ratio", "1/1", "border-radius", "999px", "display", "grid", "place-items", "center"], ["name", "crescent", 2, "width", "72px", "height", "72px", "color", "#82298F"], [2, "font-size", "120px", "animation", "sdk-metag-lyric-rise 450ms ease both", 3, "name", "ngStyle"], [1, "sdk-metag-intro-line"], ["class", "sdk-metag-lyrics-line", 3, "ngClass", 4, "ngFor", "ngForOf"], [1, "sdk-metag-lyrics-line", 3, "ngClass"], [1, "sdk-metag-waveform-progress"], ["class", "sdk-metag-waveform-bar", 3, "ngClass", "height", 4, "ngFor", "ngForOf"], [1, "sdk-metag-waveform-bar", 3, "ngClass"], [2, "justify-items", "center", "margin-bottom", "10px"], ["expand", "block", "shape", "round", 1, "sdk-metag-primary-btn", 3, "click"], [1, "sdk-metag-controls-row"], ["fill", "clear", 1, "sdk-metag-record-btn", 2, "width", "50px !important", "height", "50px!important", 3, "click"], ["name", "chevron-back-outline"], [1, "sdk-metag-record-btn", 3, "click", "disabled"], ["slot", "icon-only", 3, "name"], ["fill", "clear", 2, "height", "50px", "width", "50px"]], template: function AcuerdoVideoPage_Template(rf, ctx) { if (rf & 1) {
617
+ i0.ɵɵelementStart(0, "ion-content", 2);
618
+ i0.ɵɵtemplate(1, AcuerdoVideoPage_section_1_Template, 9, 0, "section", 3)(2, AcuerdoVideoPage_section_2_Template, 21, 13, "section", 4);
619
+ i0.ɵɵelementEnd();
620
+ } if (rf & 2) {
621
+ i0.ɵɵproperty("fullscreen", true);
622
+ i0.ɵɵadvance();
623
+ i0.ɵɵproperty("ngIf", ctx.currentStep === 1);
624
+ i0.ɵɵadvance();
625
+ i0.ɵɵproperty("ngIf", ctx.currentStep === 2);
626
+ } }, dependencies: [CommonModule, i2.NgClass, i2.NgForOf, i2.NgIf, i2.NgStyle, IonicModule, i1.IonButton, i1.IonContent, i1.IonIcon, i1.IonSpinner, SharedComponentsModule, i3.AcuerdoVideoStepGuideComponent], styles: [".sdk-metag-acuerdo-content[_ngcontent-%COMP%] {\n --background: #fff;\n --padding-top: 0;\n --padding-bottom: 0;\n --purple-primary: #82298f;\n --orange-primary: #f38301;\n}\n\n.sdk-metag-step-one[_ngcontent-%COMP%] {\n min-height: 85%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 20px;\n padding: 28px 20px 24px;\n background: #fff;\n}\n\n.sdk-metag-title[_ngcontent-%COMP%] {\n margin: 0;\n text-align: center;\n color: #111827;\n font-size: 24px;\n font-weight: 700;\n}\n\n.sdk-metag-primary-btn[_ngcontent-%COMP%] {\n --background: var(--purple-primary);\n --background-hover: #6f237a;\n --background-activated: #5c1c66;\n --border-color: var(--purple-primary);\n --color: #fff;\n //--box-shadow: 0 12px 24px rgba(130, 41, 143, 0.28);\n --border-radius: 999px;\n font-weight: 600;\n width: 80%;\n margin-inline: auto;\n //margin-top: 2rem;\n}\n\n.sdk-metag-step-two[_ngcontent-%COMP%] {\n height: 75%;\n //height: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n gap: 3rem;\n padding: 3rem 16px 10px;\n background: #fff;\n position: relative;\n isolation: isolate;\n margin-top: 3rem;\n}\n\n.sdk-metag-player-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdk-metag-player-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n border-radius: 24px;\n background: #fff;\n box-shadow: 0 18px 34px rgba(15, 23, 42, 0.1);\n padding: 16px 14px 14px;\n position: relative;\n z-index: 2;\n}\n\n.sdk-metag-camera-frame[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 20px;\n overflow: hidden;\n background: #0f172a;\n\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n }\n}\n\n.sdk-metag-camera-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n gap: 10px;\n background: rgba(2, 6, 23, 0.64);\n color: #fff;\n font-size: 13px;\n text-align: center;\n}\n\n.sdk-metag-camera-recording-chip[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 4;\n display: flex;\n align-items: center;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid #fecaca;\n background: rgba(255, 245, 245, 0.95);\n color: #991b1b;\n font-size: 12px;\n font-weight: 700;\n backdrop-filter: blur(1px);\n}\n\n.sdk-metag-lyrics-viewport[_ngcontent-%COMP%] {\n margin: 4px 0 2px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n padding: 25px 0;\n}\n\n.sdk-metag-read-chip[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border-radius: 999px;\n border: 1px solid #fed7aa;\n background: #fff7ed;\n color: #c2410c;\n font-weight: 600;\n transition: opacity .22s ease;\n font-size: 12px;\n}\n\n.sdk-metag-read-chip.is-hidden[_ngcontent-%COMP%] {\n opacity: 0;\n transform: translateY(-6px);\n border-width: 0;\n}\n\n.sdk-metag-lyrics-line[_ngcontent-%COMP%] {\n margin: 0;\n width: 100%;\n text-align: center;\n color: #94a3b8;\n font-size: 16px;\n line-height: 1.25;\n opacity: 0;\n filter: blur(3px);\n transform: translateY(28px) scale(0.985);\n transition:\n transform 420ms cubic-bezier(0.2, 0.8, 0.2, 1),\n opacity 420ms ease,\n filter 420ms ease;\n}\n\n.sdk-metag-lyrics-line.is-active[_ngcontent-%COMP%] {\n color: #0f172a;\n font-weight: 700;\n opacity: 1;\n filter: blur(0);\n transform: translateY(0) scale(1);\n animation: _ngcontent-%COMP%_sdk-metag-lyric-rise 420ms ease;\n}\n\n.sdk-metag-lyrics-line.is-next[_ngcontent-%COMP%] {\n color: #334155;\n opacity: 0.72;\n //filter: blur(0.4px);\n transform: translateY(12px) scale(0.992);\n}\n\n.sdk-metag-lyrics-line.is-upcoming[_ngcontent-%COMP%] {\n color: #475569;\n opacity: 0.45;\n //filter: blur(0.8px);\n transform: translateY(24px) scale(0.985);\n}\n\n.sdk-metag-lyrics-line.is-past-near[_ngcontent-%COMP%] {\n opacity: 0.55;\n transform: translateY(-12px) scale(0.995);\n}\n\n.sdk-metag-lyrics-line.is-past[_ngcontent-%COMP%] {\n opacity: 0.22;\n transform: translateY(-22px) scale(0.985);\n}\n\n.sdk-metag-lyrics-line.is-idle[_ngcontent-%COMP%] {\n opacity: 0;\n filter: blur(3px);\n transform: translateY(28px) scale(0.985);\n}\n\n.sdk-metag-intro-line[_ngcontent-%COMP%] {\n margin: 0;\n width: 100%;\n text-align: center;\n color: #0f172a;\n font-size: 16px;\n font-weight: 700;\n line-height: 1.3;\n animation: _ngcontent-%COMP%_sdk-metag-intro-fade-in-out 3s ease forwards;\n}\n\n@keyframes _ngcontent-%COMP%_sdk-metag-lyric-rise {\n from {\n opacity: 0.2;\n filter: blur(2px);\n transform: translateY(18px) scale(0.99);\n }\n to {\n opacity: 1;\n filter: blur(0);\n transform: translateY(0) scale(1);\n }\n}\n\n@keyframes _ngcontent-%COMP%_sdk-metag-intro-fade-in-out {\n 0% {\n opacity: 0;\n transform: translateY(8px);\n }\n 25% {\n opacity: 1;\n transform: translateY(0);\n }\n 70% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(-6px);\n }\n}\n\n.sdk-metag-waveform-progress[_ngcontent-%COMP%] {\n margin-top: 20px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 75%;\n align-self: center;\n}\n\n.sdk-metag-waveform-bar[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 3px;\n max-width: 8px;\n border-radius: 999px;\n background: #d1d5db;\n opacity: 0.75;\n transition:\n background-color 220ms ease,\n opacity 220ms ease;\n}\n\n.sdk-metag-waveform-bar.is-filled[_ngcontent-%COMP%] {\n background: #10b981;\n opacity: 1;\n}\n\n.sdk-metag-waveform-bar.is-current[_ngcontent-%COMP%] {\n background: #22c55e;\n opacity: 1;\n animation: _ngcontent-%COMP%_sdk-metag-recording-pulse .55s ease-in-out infinite alternate;\n}\n\n.sdk-metag-waveform-bar.is-pending[_ngcontent-%COMP%] {\n background: #cbd5e1;\n opacity: 0.85;\n}\n\n.sdk-metag-player-footer[_ngcontent-%COMP%] {\n position: relative;\n z-index: 2;\n}\n\n.sdk-metag-controls-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 14px;\n}\n\n.sdk-metag-recording-chip[_ngcontent-%COMP%] {\n margin: 2px auto 10px;\n display: flex;\n align-items: center;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid #fecaca;\n background: #fff5f5;\n color: #991b1b;\n font-size: 12px;\n font-weight: 700;\n}\n\n.sdk-metag-recording-dot[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #ef4444;\n animation: _ngcontent-%COMP%_sdk-metag-recording-pulse 1s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_sdk-metag-recording-pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: scale(0.72);\n opacity: 0.45;\n }\n}\n\n.sdk-metag-record-btn[_ngcontent-%COMP%] {\n width: 68px;\n height: 68px;\n --padding-start: 0;\n --padding-end: 0;\n --border-radius: 50%;\n --background: #111827;\n --background-hover: #1f2937;\n --background-activated: #0f172a;\n --border-color: #111827;\n --border-width: 2px;\n --border-style: solid;\n --color: #fff;\n --box-shadow: 0 12px 24px rgba(15, 23, 42, 0.22);\n\n ion-icon {\n font-size: 28px;\n }\n}"] }); }
627
+ }
628
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AcuerdoVideoPage, [{
629
+ type: Component,
630
+ args: [{ selector: 'app-acuerdo-video-test', standalone: true, imports: [CommonModule, IonicModule, SharedComponentsModule], template: "<ion-content class=\"sdk-metag-acuerdo-content\" [fullscreen]=\"true\">\n <section *ngIf=\"currentStep === 1\" class=\"sdk-metag-step-one\">\n <div style=\"width:100%;display:flex;justify-content:flex-end;\">\n <ion-button\n fill=\"clear\"\n style=\"width:42px;height:42px;--padding-start:0;--padding-end:0;--border-radius:50%;--background:#f3e8ff;--background-hover:#e9d5ff;--background-activated:#ddd6fe;--color:#82298F;\"\n (click)=\"closeScreen()\">\n <ion-icon slot=\"icon-only\" name=\"close-outline\"></ion-icon>\n </ion-button>\n </div>\n\n <h1\n class=\"sdk-metag-title\"\n style=\"animation:sdk-metag-lyric-rise .45s ease both;\">\n Acuerdo de video\n </h1>\n\n <app-acuerdo-video-step-guide></app-acuerdo-video-step-guide>\n\n <ion-button\n class=\"sdk-metag-primary-btn\"\n expand=\"block\"\n style=\"animation:sdk-metag-lyric-rise .6s ease both;animation-delay:.24s;\"\n (click)=\"goToRecordingStep()\">\n Estoy listo\n </ion-button>\n </section>\n\n <section *ngIf=\"currentStep === 2\" class=\"sdk-metag-step-two\">\n <header class=\"sdk-metag-player-header\">\n <h1 class=\"sdk-metag-title\">Acuerdo de video</h1>\n </header>\n\n <div class=\"sdk-metag-player-card\">\n <div class=\"sdk-metag-camera-frame\">\n <video #videoElement autoplay muted playsinline></video>\n <div class=\"sdk-metag-camera-overlay\" *ngIf=\"isInitializingCamera || !isCameraReady\">\n <ion-spinner name=\"crescent\"></ion-spinner>\n <span>Preparando c\u00E1mara...</span>\n </div>\n <div *ngIf=\"isRecording\" class=\"sdk-metag-camera-recording-chip\">\n <span class=\"sdk-metag-recording-dot\"></span>\n <span style=\"margin-left:10px;\">00:{{ timeRemaining < 10 ? '0' + timeRemaining : timeRemaining }}</span>\n </div>\n\n <div\n *ngIf=\"validationState === 'validating' || validationState === 'success' || validationState === 'error'\"\n style=\"position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(15,23,42,.34);backdrop-filter:blur(1px);\">\n <ng-container *ngIf=\"validationState === 'validating'; else resultState\">\n <div style=\"width:68%;aspect-ratio:1/1;border-radius:999px;display:grid;place-items:center\">\n <ion-spinner name=\"crescent\" style=\"width:72px;height:72px;color:#82298F;\"></ion-spinner>\n </div>\n </ng-container>\n <ng-template #resultState>\n <div style=\"width:68%;aspect-ratio:1/1;border-radius:999px;display:grid;place-items:center;\">\n <ion-icon\n [name]=\"validationState === 'success' ? 'checkmark-circle' : 'close-circle'\"\n [ngStyle]=\"validationState === 'success' ? { color: '#16a34a' } : { color: '#dc2626' }\"\n style=\"font-size:120px;animation:sdk-metag-lyric-rise 450ms ease both;\">\n </ion-icon>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"sdk-metag-lyrics-viewport\">\n <div class=\"sdk-metag-read-chip\" [ngClass]=\"{ 'is-hidden': isRecording || isPreRecordingIntro }\" [ngStyle]=\"getReadChipStyles()\">\n <span>{{ getReadChipMessage() }}</span>\n </div>\n <p *ngIf=\"isPreRecordingIntro\" class=\"sdk-metag-intro-line\">{{ introPromptText }}</p>\n <ng-container *ngIf=\"isRecording\">\n <p\n *ngFor=\"let line of scriptChunks; let i = index\"\n class=\"sdk-metag-lyrics-line\"\n [ngClass]=\"getLyricClass(i)\">\n {{ line }}\n </p>\n </ng-container>\n </div>\n\n <div *ngIf=\"isRecording\" class=\"sdk-metag-waveform-progress\">\n <span\n *ngFor=\"let bar of waveformBars\"\n class=\"sdk-metag-waveform-bar\"\n [ngClass]=\"getWaveClass(bar)\"\n [style.height.px]=\"getWaveHeight(bar)\">\n </span>\n </div>\n\n </div>\n\n <footer class=\"sdk-metag-player-footer\">\n <div *ngIf=\"validationState === 'success'\" style=\"justify-items:center;margin-bottom:10px;\">\n <ion-button class=\"sdk-metag-primary-btn\" expand=\"block\" shape=\"round\" (click)=\"goToStepOne()\">\n Continuar\n </ion-button>\n </div>\n\n <div class=\"sdk-metag-controls-row\" *ngIf=\"(!isRecording && validationState === 'idle') || validationState === 'error'\">\n <ion-button\n fill=\"clear\"\n class=\"sdk-metag-record-btn\"\n style=\"width: 50px !important; height: 50px!important;\"\n (click)=\"goToStepOne()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n\n <ion-button\n class=\"sdk-metag-record-btn\"\n [disabled]=\"isInitializingCamera || !isCameraReady || isPreRecordingIntro\"\n (click)=\"isRecording ? stopRecording() : recordVideo()\">\n <ion-icon slot=\"icon-only\" [name]=\"isRecording ? 'pause-outline' : 'mic-outline'\"></ion-icon>\n </ion-button>\n\n <ion-button\n fill=\"clear\"\n style=\"height: 50px; width: 50px\">\n </ion-button>\n </div>\n </footer>\n </section>\n</ion-content>\n", styles: [".sdk-metag-acuerdo-content {\n --background: #fff;\n --padding-top: 0;\n --padding-bottom: 0;\n --purple-primary: #82298f;\n --orange-primary: #f38301;\n}\n\n.sdk-metag-step-one {\n min-height: 85%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 20px;\n padding: 28px 20px 24px;\n background: #fff;\n}\n\n.sdk-metag-title {\n margin: 0;\n text-align: center;\n color: #111827;\n font-size: 24px;\n font-weight: 700;\n}\n\n.sdk-metag-primary-btn {\n --background: var(--purple-primary);\n --background-hover: #6f237a;\n --background-activated: #5c1c66;\n --border-color: var(--purple-primary);\n --color: #fff;\n //--box-shadow: 0 12px 24px rgba(130, 41, 143, 0.28);\n --border-radius: 999px;\n font-weight: 600;\n width: 80%;\n margin-inline: auto;\n //margin-top: 2rem;\n}\n\n.sdk-metag-step-two {\n height: 75%;\n //height: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n gap: 3rem;\n padding: 3rem 16px 10px;\n background: #fff;\n position: relative;\n isolation: isolate;\n margin-top: 3rem;\n}\n\n.sdk-metag-player-header {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.sdk-metag-player-card {\n display: flex;\n flex-direction: column;\n border-radius: 24px;\n background: #fff;\n box-shadow: 0 18px 34px rgba(15, 23, 42, 0.1);\n padding: 16px 14px 14px;\n position: relative;\n z-index: 2;\n}\n\n.sdk-metag-camera-frame {\n position: relative;\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 20px;\n overflow: hidden;\n background: #0f172a;\n\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transform: scaleX(-1);\n }\n}\n\n.sdk-metag-camera-overlay {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n gap: 10px;\n background: rgba(2, 6, 23, 0.64);\n color: #fff;\n font-size: 13px;\n text-align: center;\n}\n\n.sdk-metag-camera-recording-chip {\n position: absolute;\n top: 12px;\n right: 12px;\n z-index: 4;\n display: flex;\n align-items: center;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid #fecaca;\n background: rgba(255, 245, 245, 0.95);\n color: #991b1b;\n font-size: 12px;\n font-weight: 700;\n backdrop-filter: blur(1px);\n}\n\n.sdk-metag-lyrics-viewport {\n margin: 4px 0 2px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: center;\n padding: 25px 0;\n}\n\n.sdk-metag-read-chip {\n padding: 8px 12px;\n border-radius: 999px;\n border: 1px solid #fed7aa;\n background: #fff7ed;\n color: #c2410c;\n font-weight: 600;\n transition: opacity .22s ease;\n font-size: 12px;\n}\n\n.sdk-metag-read-chip.is-hidden {\n opacity: 0;\n transform: translateY(-6px);\n border-width: 0;\n}\n\n.sdk-metag-lyrics-line {\n margin: 0;\n width: 100%;\n text-align: center;\n color: #94a3b8;\n font-size: 16px;\n line-height: 1.25;\n opacity: 0;\n filter: blur(3px);\n transform: translateY(28px) scale(0.985);\n transition:\n transform 420ms cubic-bezier(0.2, 0.8, 0.2, 1),\n opacity 420ms ease,\n filter 420ms ease;\n}\n\n.sdk-metag-lyrics-line.is-active {\n color: #0f172a;\n font-weight: 700;\n opacity: 1;\n filter: blur(0);\n transform: translateY(0) scale(1);\n animation: sdk-metag-lyric-rise 420ms ease;\n}\n\n.sdk-metag-lyrics-line.is-next {\n color: #334155;\n opacity: 0.72;\n //filter: blur(0.4px);\n transform: translateY(12px) scale(0.992);\n}\n\n.sdk-metag-lyrics-line.is-upcoming {\n color: #475569;\n opacity: 0.45;\n //filter: blur(0.8px);\n transform: translateY(24px) scale(0.985);\n}\n\n.sdk-metag-lyrics-line.is-past-near {\n opacity: 0.55;\n transform: translateY(-12px) scale(0.995);\n}\n\n.sdk-metag-lyrics-line.is-past {\n opacity: 0.22;\n transform: translateY(-22px) scale(0.985);\n}\n\n.sdk-metag-lyrics-line.is-idle {\n opacity: 0;\n filter: blur(3px);\n transform: translateY(28px) scale(0.985);\n}\n\n.sdk-metag-intro-line {\n margin: 0;\n width: 100%;\n text-align: center;\n color: #0f172a;\n font-size: 16px;\n font-weight: 700;\n line-height: 1.3;\n animation: sdk-metag-intro-fade-in-out 3s ease forwards;\n}\n\n@keyframes sdk-metag-lyric-rise {\n from {\n opacity: 0.2;\n filter: blur(2px);\n transform: translateY(18px) scale(0.99);\n }\n to {\n opacity: 1;\n filter: blur(0);\n transform: translateY(0) scale(1);\n }\n}\n\n@keyframes sdk-metag-intro-fade-in-out {\n 0% {\n opacity: 0;\n transform: translateY(8px);\n }\n 25% {\n opacity: 1;\n transform: translateY(0);\n }\n 70% {\n opacity: 1;\n transform: translateY(0);\n }\n 100% {\n opacity: 0;\n transform: translateY(-6px);\n }\n}\n\n.sdk-metag-waveform-progress {\n margin-top: 20px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 75%;\n align-self: center;\n}\n\n.sdk-metag-waveform-bar {\n flex: 1 1 auto;\n min-width: 3px;\n max-width: 8px;\n border-radius: 999px;\n background: #d1d5db;\n opacity: 0.75;\n transition:\n background-color 220ms ease,\n opacity 220ms ease;\n}\n\n.sdk-metag-waveform-bar.is-filled {\n background: #10b981;\n opacity: 1;\n}\n\n.sdk-metag-waveform-bar.is-current {\n background: #22c55e;\n opacity: 1;\n animation: sdk-metag-recording-pulse .55s ease-in-out infinite alternate;\n}\n\n.sdk-metag-waveform-bar.is-pending {\n background: #cbd5e1;\n opacity: 0.85;\n}\n\n.sdk-metag-player-footer {\n position: relative;\n z-index: 2;\n}\n\n.sdk-metag-controls-row {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 14px;\n}\n\n.sdk-metag-recording-chip {\n margin: 2px auto 10px;\n display: flex;\n align-items: center;\n padding: 7px 12px;\n border-radius: 999px;\n border: 1px solid #fecaca;\n background: #fff5f5;\n color: #991b1b;\n font-size: 12px;\n font-weight: 700;\n}\n\n.sdk-metag-recording-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: #ef4444;\n animation: sdk-metag-recording-pulse 1s ease-in-out infinite;\n}\n\n@keyframes sdk-metag-recording-pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: scale(0.72);\n opacity: 0.45;\n }\n}\n\n.sdk-metag-record-btn {\n width: 68px;\n height: 68px;\n --padding-start: 0;\n --padding-end: 0;\n --border-radius: 50%;\n --background: #111827;\n --background-hover: #1f2937;\n --background-activated: #0f172a;\n --border-color: #111827;\n --border-width: 2px;\n --border-style: solid;\n --color: #fff;\n --box-shadow: 0 12px 24px rgba(15, 23, 42, 0.22);\n\n ion-icon {\n font-size: 28px;\n }\n}\n"] }]
631
+ }], () => [{ type: i1.NavController }, { type: i0.ChangeDetectorRef }], { videoElement: [{
632
+ type: ViewChild,
633
+ args: ['videoElement', { static: false }]
634
+ }], backFunction: [{
635
+ type: Input
636
+ }], closeRequested: [{
637
+ type: Input
638
+ }] }); })();
639
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AcuerdoVideoPage, { className: "AcuerdoVideoPage" }); })();
640
+ //# sourceMappingURL=acuerdo-video.page.js.map