metag-verify 0.0.0-stage → 0.1.0

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 (33) hide show
  1. package/README.md +23 -2
  2. package/esm2022/lib/metag-verify.component.mjs +134 -0
  3. package/esm2022/lib/models.mjs +2 -0
  4. package/esm2022/lib/screens/blocked/blocked.component.mjs +44 -0
  5. package/esm2022/lib/screens/dialog/dialog.component.mjs +44 -0
  6. package/esm2022/lib/screens/loading/loading.component.mjs +31 -0
  7. package/esm2022/lib/screens/selfie/selfie.component.mjs +232 -0
  8. package/esm2022/lib/services/crypto.mjs +15 -0
  9. package/esm2022/lib/services/metag-api.service.mjs +114 -0
  10. package/esm2022/lib/services/screen-brightness.mjs +53 -0
  11. package/esm2022/lib/services/virtual-camera.mjs +17 -0
  12. package/esm2022/lib/theme/brand.mjs +7 -0
  13. package/esm2022/lib/version.mjs +3 -0
  14. package/esm2022/metag-verify.mjs +5 -0
  15. package/esm2022/public-api.mjs +8 -0
  16. package/fesm2022/metag-verify.mjs +682 -0
  17. package/fesm2022/metag-verify.mjs.map +1 -0
  18. package/index.d.ts +5 -0
  19. package/lib/metag-verify.component.d.ts +38 -0
  20. package/lib/models.d.ts +9 -0
  21. package/lib/screens/blocked/blocked.component.d.ts +9 -0
  22. package/lib/screens/dialog/dialog.component.d.ts +11 -0
  23. package/lib/screens/loading/loading.component.d.ts +10 -0
  24. package/lib/screens/selfie/selfie.component.d.ts +60 -0
  25. package/lib/services/crypto.d.ts +2 -0
  26. package/lib/services/metag-api.service.d.ts +48 -0
  27. package/lib/services/screen-brightness.d.ts +7 -0
  28. package/lib/services/virtual-camera.d.ts +2 -0
  29. package/lib/theme/brand.d.ts +4 -0
  30. package/lib/version.d.ts +2 -0
  31. package/metag-verify-0.1.0.tgz +0 -0
  32. package/package.json +45 -3
  33. package/public-api.d.ts +4 -0
package/README.md CHANGED
@@ -1,3 +1,24 @@
1
- # Temporary Holding Version
1
+ # MetagVerify
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project metag-verify` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project metag-verify`.
8
+ > Note: Don't forget to add `--project metag-verify` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build metag-verify` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build metag-verify`, go to the dist folder `cd dist/metag-verify` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test metag-verify` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,134 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, inject, signal } from '@angular/core';
2
+ import { MetagApiError, MetagApiService } from './services/metag-api.service';
3
+ import { VIRTUAL_CAMERA_REASON } from './services/virtual-camera';
4
+ import { METAG_VERIFY_VERSION } from './version';
5
+ import { LoadingComponent } from './screens/loading/loading.component';
6
+ import { SelfieComponent } from './screens/selfie/selfie.component';
7
+ import { BlockedComponent } from './screens/blocked/blocked.component';
8
+ import * as i0 from "@angular/core";
9
+ const DEFAULT_ENV = 'PROD_IT_01';
10
+ const PHOTO_SELFIE_STEP = 5;
11
+ /**
12
+ * Componente de entrada de metag-verify. Versión 1: flujo Simple Auth con Foto Selfie.
13
+ *
14
+ * Uso:
15
+ * <metag-verify [connection]="..." [apiKey]="..." [env]="'QA_IT_01'" [dpi]="..." (finished)="onResult($event)">
16
+ *
17
+ * Se muestra a pantalla completa sobre la app. Cuando emite (finished), la app debe quitarlo de la vista.
18
+ */
19
+ export class MetagVerifyComponent {
20
+ constructor() {
21
+ /** Ambiente de MetaG, por ejemplo 'QA_IT_01'. Por defecto 'PROD_IT_01'. */
22
+ this.env = DEFAULT_ENV;
23
+ /** Número de DPI de la persona. */
24
+ this.dpi = '';
25
+ this.finished = new EventEmitter();
26
+ this.api = inject(MetagApiService);
27
+ this.screen = signal('loading');
28
+ this.blockedReason = VIRTUAL_CAMERA_REASON;
29
+ this.endpoint = '';
30
+ this.codigo = '';
31
+ this.done = false;
32
+ /** Se pasa a la pantalla de selfie; si lanza error, la selfie muestra el mensaje y permite reintentar.
33
+ * Si sale bien, la selfie muestra la confirmación y luego emite (completed). */
34
+ this.submitSelfie = async (fileBase64) => {
35
+ await this.api.sendPhotoSelfie(this.endpoint, {
36
+ codigo: this.codigo,
37
+ connection: this.connection,
38
+ apiKey: this.apiKey,
39
+ fileBase64,
40
+ });
41
+ };
42
+ }
43
+ ngOnInit() {
44
+ void this.start();
45
+ }
46
+ finish(success, reason, message) {
47
+ if (this.done)
48
+ return;
49
+ this.done = true;
50
+ this.finished.emit({ success, reason, ...(message ? { message } : {}) });
51
+ }
52
+ async start() {
53
+ if (!this.connection || !this.apiKey) {
54
+ this.finish(false, 'error', 'Faltan los datos de conexión (connection y apiKey).');
55
+ return;
56
+ }
57
+ try {
58
+ const environment = await this.api.getEnvironment(this.env || DEFAULT_ENV);
59
+ this.endpoint = environment.env_endpoint;
60
+ const config = await this.api.getConnectionConfig(this.endpoint, this.connection);
61
+ const firstStep = config.steps[0];
62
+ if (!firstStep || firstStep.type !== PHOTO_SELFIE_STEP) {
63
+ this.finish(false, 'unsupported', 'Esta versión de metag-verify solo soporta el flujo de Foto Selfie.');
64
+ return;
65
+ }
66
+ const process = await this.api.initProcess(this.endpoint, {
67
+ dpi: this.dpi,
68
+ connection: this.connection,
69
+ apiKey: this.apiKey,
70
+ version: METAG_VERIFY_VERSION,
71
+ });
72
+ this.codigo = process.codigo;
73
+ // Si el proceso ya estaba completo, no hay nada que capturar.
74
+ if (process.completed) {
75
+ this.finish(true, 'completed');
76
+ return;
77
+ }
78
+ this.screen.set('selfie');
79
+ }
80
+ catch (error) {
81
+ const message = error instanceof MetagApiError ? error.message : 'No se pudo realizar el proceso.';
82
+ this.finish(false, 'error', message);
83
+ }
84
+ }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MetagVerifyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
86
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MetagVerifyComponent, isStandalone: true, selector: "metag-verify", inputs: { connection: "connection", apiKey: "apiKey", env: "env", dpi: "dpi" }, outputs: { finished: "finished" }, ngImport: i0, template: `
87
+ @switch (screen()) {
88
+ @case ('loading') { <mv-loading /> }
89
+ @case ('selfie') {
90
+ <mv-selfie
91
+ [submit]="submitSelfie"
92
+ (completed)="finish(true, 'completed')"
93
+ (closed)="finish(false, 'cancelled')"
94
+ (blocked)="screen.set('blocked')"
95
+ (failed)="finish(false, 'error', $event)" />
96
+ }
97
+ @case ('blocked') {
98
+ <mv-blocked [reason]="blockedReason" (exit)="finish(false, 'blocked', blockedReason)" />
99
+ }
100
+ }
101
+ `, isInline: true, styles: [":host{--mv-primary: var(--metag-primary, #0545ab);--mv-primary-hover: var(--metag-primary-hover, #043a90);--mv-accent: var(--metag-accent, #ed001b);--mv-success: var(--metag-success, #22c55e);--mv-text: var(--metag-text, #09090b);--mv-muted: var(--metag-muted, #71717a);--mv-surface: var(--metag-surface, #ffffff);--mv-font: var(--metag-font, \"Geist\", -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", Roboto, sans-serif);position:fixed;inset:0;z-index:2147483000;display:block;background:var(--mv-surface);font-family:var(--mv-font);-webkit-font-smoothing:antialiased}:host *,:host *:before,:host *:after{box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: LoadingComponent, selector: "mv-loading" }, { kind: "component", type: SelfieComponent, selector: "mv-selfie", inputs: ["submit"], outputs: ["completed", "closed", "blocked", "failed"] }, { kind: "component", type: BlockedComponent, selector: "mv-blocked", inputs: ["reason"], outputs: ["exit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MetagVerifyComponent, decorators: [{
104
+ type: Component,
105
+ args: [{ selector: 'metag-verify', standalone: true, imports: [LoadingComponent, SelfieComponent, BlockedComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
106
+ @switch (screen()) {
107
+ @case ('loading') { <mv-loading /> }
108
+ @case ('selfie') {
109
+ <mv-selfie
110
+ [submit]="submitSelfie"
111
+ (completed)="finish(true, 'completed')"
112
+ (closed)="finish(false, 'cancelled')"
113
+ (blocked)="screen.set('blocked')"
114
+ (failed)="finish(false, 'error', $event)" />
115
+ }
116
+ @case ('blocked') {
117
+ <mv-blocked [reason]="blockedReason" (exit)="finish(false, 'blocked', blockedReason)" />
118
+ }
119
+ }
120
+ `, styles: [":host{--mv-primary: var(--metag-primary, #0545ab);--mv-primary-hover: var(--metag-primary-hover, #043a90);--mv-accent: var(--metag-accent, #ed001b);--mv-success: var(--metag-success, #22c55e);--mv-text: var(--metag-text, #09090b);--mv-muted: var(--metag-muted, #71717a);--mv-surface: var(--metag-surface, #ffffff);--mv-font: var(--metag-font, \"Geist\", -apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", Roboto, sans-serif);position:fixed;inset:0;z-index:2147483000;display:block;background:var(--mv-surface);font-family:var(--mv-font);-webkit-font-smoothing:antialiased}:host *,:host *:before,:host *:after{box-sizing:border-box}\n"] }]
121
+ }], propDecorators: { connection: [{
122
+ type: Input,
123
+ args: [{ required: true }]
124
+ }], apiKey: [{
125
+ type: Input,
126
+ args: [{ required: true }]
127
+ }], env: [{
128
+ type: Input
129
+ }], dpi: [{
130
+ type: Input
131
+ }], finished: [{
132
+ type: Output
133
+ }] } });
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWctdmVyaWZ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGFnLXZlcmlmeS9zcmMvbGliL21ldGFnLXZlcmlmeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFdkUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBQ2pDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBSTVCOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLG9CQUFvQjtJQXZCakM7UUE0QkUsMkVBQTJFO1FBQ2xFLFFBQUcsR0FBRyxXQUFXLENBQUM7UUFDM0IsbUNBQW1DO1FBQzFCLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFFUixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFFMUMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0QyxXQUFNLEdBQUcsTUFBTSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLGtCQUFhLEdBQUcscUJBQXFCLENBQUM7UUFFdkMsYUFBUSxHQUFHLEVB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QyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO1lBQ25HLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQzsrR0E5RVUsb0JBQW9CO21HQUFwQixvQkFBb0IsMkxBbEJyQjs7Ozs7Ozs7Ozs7Ozs7O0dBZVQsNHNCQWpCUyxnQkFBZ0IsdURBQUUsZUFBZSxpSUFBRSxnQkFBZ0I7OzRGQW9CbEQsb0JBQW9CO2tCQXZCaEMsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixDQUFDLG1CQUM3Qyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7R0FlVDs4QkFLMEIsVUFBVTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBRUUsTUFBTTtzQkFBaEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBRWhCLEdBQUc7c0JBQVgsS0FBSztnQkFFRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YWdWZXJpZnlSZWFzb24sIE1ldGFnVmVyaWZ5UmVzdWx0IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgTWV0YWdBcGlFcnJvciwgTWV0YWdBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tZXRhZy1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBWSVJUVUFMX0NBTUVSQV9SRUFTT04gfSBmcm9tICcuL3NlcnZpY2VzL3ZpcnR1YWwtY2FtZXJhJztcbmltcG9ydCB7IE1FVEFHX1ZFUklGWV9WRVJTSU9OIH0gZnJvbSAnLi92ZXJzaW9uJztcbmltcG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuL3NjcmVlbnMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxmaWVDb21wb25lbnQgfSBmcm9tICcuL3NjcmVlbnMvc2VsZmllL3NlbGZpZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmxvY2tlZENvbXBvbmVudCB9IGZyb20gJy4vc2NyZWVucy9ibG9ja2VkL2Jsb2NrZWQuY29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9FTlYgPSAnUFJPRF9JVF8wMSc7XG5jb25zdCBQSE9UT19TRUxGSUVfU1RFUCA9IDU7XG5cbnR5cGUgU2NyZWVuID0gJ2xvYWRpbmcnIHwgJ3NlbGZpZScgfCAnYmxvY2tlZCc7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBlbnRyYWRhIGRlIG1ldGFnLXZlcmlmeS4gVmVyc2nDs24gMTogZmx1am8gU2ltcGxlIEF1dGggY29uIEZvdG8gU2VsZmllLlxuICpcbiAqIFVzbzpcbiAqICAgPG1ldGFnLXZlcmlmeSBbY29ubmVjdGlvbl09XCIuLi5cIiBbYXBpS2V5XT1cIi4uLlwiIFtlbnZdPVwiJ1FBX0lUXzAxJ1wiIFtkcGldPVwiLi4uXCIgKGZpbmlzaGVkKT1cIm9uUmVzdWx0KCRldmVudClcIj5cbiAqXG4gKiBTZSBtdWVzdHJhIGEgcGFudGFsbGEgY29tcGxldGEgc29icmUgbGEgYXBwLiBDdWFuZG8gZW1pdGUgKGZpbmlzaGVkKSwgbGEgYXBwIGRlYmUgcXVpdGFybG8gZGUgbGEgdmlzdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21ldGFnLXZlcmlmeScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtMb2FkaW5nQ29tcG9uZW50LCBTZWxmaWVDb21wb25lbnQsIEJsb2NrZWRDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAc3dpdGNoIChzY3JlZW4oKSkge1xuICAgICAgQGNhc2UgKCdsb2FkaW5nJykgeyA8bXYtbG9hZGluZyAvPiB9XG4gICAgICBAY2FzZSAoJ3NlbGZpZScpIHtcbiAgICAgICAgPG12LXNlbGZpZVxuICAgICAgICAgIFtzdWJtaXRdPVwic3VibWl0U2VsZmllXCJcbiAgICAgICAgICAoY29tcGxldGVkKT1cImZpbmlzaCh0cnVlLCAnY29tcGxldGVkJylcIlxuICAgICAgICAgIChjbG9zZWQpPVwiZmluaXNoKGZhbHNlLCAnY2FuY2VsbGVkJylcIlxuICAgICAgICAgIChibG9ja2VkKT1cInNjcmVlbi5zZXQoJ2Jsb2NrZWQnKVwiXG4gICAgICAgICAgKGZhaWxlZCk9XCJmaW5pc2goZmFsc2UsICdlcnJvcicsICRldmVudClcIiAvPlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdibG9ja2VkJykge1xuICAgICAgICA8bXYtYmxvY2tlZCBbcmVhc29uXT1cImJsb2NrZWRSZWFzb25cIiAoZXhpdCk9XCJmaW5pc2goZmFsc2UsICdibG9ja2VkJywgYmxvY2tlZFJlYXNvbilcIiAvPlxuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL21ldGFnLXZlcmlmeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFnVmVyaWZ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqIElkZW50aWZpY2Fkb3IgZGUgbGEgY29uZXhpw7NuIChjb25uZWN0aW9uU3RyaW5nKS4gKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29ubmVjdGlvbiE6IHN0cmluZztcbiAgLyoqIEFQSSBrZXkgZGVsIGNsaWVudGUgcGFyYSBlc2EgY29uZXhpw7NuLiAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBhcGlLZXkhOiBzdHJpbmc7XG4gIC8qKiBBbWJpZW50ZSBkZSBNZXRhRywgcG9yIGVqZW1wbG8gJ1FBX0lUXzAxJy4gUG9yIGRlZmVjdG8gJ1BST0RfSVRfMDEnLiAqL1xuICBASW5wdXQoKSBlbnYgPSBERUZBVUxUX0VOVjtcbiAgLyoqIE7Dum1lcm8gZGUgRFBJIGRlIGxhIHBlcnNvbmEuICovXG4gIEBJbnB1dCgpIGRwaSA9ICcnO1xuXG4gIEBPdXRwdXQoKSBmaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YWdWZXJpZnlSZXN1bHQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGkgPSBpbmplY3QoTWV0YWdBcGlTZXJ2aWNlKTtcblxuICByZWFkb25seSBzY3JlZW4gPSBzaWduYWw8U2NyZWVuPignbG9hZGluZycpO1xuICByZWFkb25seSBibG9ja2VkUmVhc29uID0gVklSVFVBTF9DQU1FUkFfUkVBU09OO1xuXG4gIHByaXZhdGUgZW5kcG9pbnQgPSAnJztcbiAgcHJpdmF0ZSBjb2RpZ28gPSAnJztcbiAgcHJpdmF0ZSBkb25lID0gZmFsc2U7XG5cbiAgLyoqIFNlIHBhc2EgYSBsYSBwYW50YWxsYSBkZSBzZWxmaWU7IHNpIGxhbnphIGVycm9yLCBsYSBzZWxmaWUgbXVlc3RyYSBlbCBtZW5zYWplIHkgcGVybWl0ZSByZWludGVudGFyLlxuICAgKiAgU2kgc2FsZSBiaWVuLCBsYSBzZWxmaWUgbXVlc3RyYSBsYSBjb25maXJtYWNpw7NuIHkgbHVlZ28gZW1pdGUgKGNvbXBsZXRlZCkuICovXG4gIHJlYWRvbmx5IHN1Ym1pdFNlbGZpZSA9IGFzeW5jIChmaWxlQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCB0aGlzLmFwaS5zZW5kUGhvdG9TZWxmaWUodGhpcy5lbmRwb2ludCwge1xuICAgICAgY29kaWdvOiB0aGlzLmNvZGlnbyxcbiAgICAgIGNvbm5lY3Rpb246IHRoaXMuY29ubmVjdGlvbixcbiAgICAgIGFwaUtleTogdGhpcy5hcGlLZXksXG4gICAgICBmaWxlQmFzZTY0LFxuICAgIH0pO1xuICB9O1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZmluaXNoKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlYXNvbjogTWV0YWdWZXJpZnlSZWFzb24sIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb25lKSByZXR1cm47XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmZpbmlzaGVkLmVtaXQoeyBzdWNjZXNzLCByZWFzb24sIC4uLihtZXNzYWdlID8geyBtZXNzYWdlIH0gOiB7fSkgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb25uZWN0aW9uIHx8ICF0aGlzLmFwaUtleSkge1xuICAgICAgdGhpcy5maW5pc2goZmFsc2UsICdlcnJvcicsICdGYWx0YW4gbG9zIGRhdG9zIGRlIGNvbmV4acOzbiAoY29ubmVjdGlvbiB5IGFwaUtleSkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gYXdhaXQgdGhpcy5hcGkuZ2V0RW52aXJvbm1lbnQodGhpcy5lbnYgfHwgREVGQVVMVF9FTlYpO1xuICAgICAgdGhpcy5lbmRwb2ludCA9IGVudmlyb25tZW50LmVudl9lbmRwb2ludDtcblxuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5hcGkuZ2V0Q29ubmVjdGlvbkNvbmZpZyh0aGlzLmVuZHBvaW50LCB0aGlzLmNvbm5lY3Rpb24pO1xuICAgICAgY29uc3QgZmlyc3RTdGVwID0gY29uZmlnLnN0ZXBzWzBdO1xuICAgICAgaWYgKCFmaXJzdFN0ZXAgfHwgZmlyc3RTdGVwLnR5cGUgIT09IFBIT1RPX1NFTEZJRV9TVEVQKSB7XG4gICAgICAgIHRoaXMuZmluaXNoKGZhbHNlLCAndW5zdXBwb3J0ZWQnLCAnRXN0YSB2ZXJzacOzbiBkZSBtZXRhZy12ZXJpZnkgc29sbyBzb3BvcnRhIGVsIGZsdWpvIGRlIEZvdG8gU2VsZmllLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2Nlc3MgPSBhd2FpdCB0aGlzLmFwaS5pbml0UHJvY2Vzcyh0aGlzLmVuZHBvaW50LCB7XG4gICAgICAgIGRwaTogdGhpcy5kcGksXG4gICAgICAgIGNvbm5lY3Rpb246IHRoaXMuY29ubmVjdGlvbixcbiAgICAgICAgYXBpS2V5OiB0aGlzLmFwaUtleSxcbiAgICAgICAgdmVyc2lvbjogTUVUQUdfVkVSSUZZX1ZFUlNJT04sXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29kaWdvID0gcHJvY2Vzcy5jb2RpZ287XG5cbiAgICAgIC8vIFNpIGVsIHByb2Nlc28geWEgZXN0YWJhIGNvbXBsZXRvLCBubyBoYXkgbmFkYSBxdWUgY2FwdHVyYXIuXG4gICAgICBpZiAocHJvY2Vzcy5jb21wbGV0ZWQpIHtcbiAgICAgICAgdGhpcy5maW5pc2godHJ1ZSwgJ2NvbXBsZXRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2NyZWVuLnNldCgnc2VsZmllJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIE1ldGFnQXBpRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ05vIHNlIHB1ZG8gcmVhbGl6YXIgZWwgcHJvY2Vzby4nO1xuICAgICAgdGhpcy5maW5pc2goZmFsc2UsICdlcnJvcicsIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YWctdmVyaWZ5L3NyYy9saWIvbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTW90aXZvIHBvciBlbCBxdWUgdGVybWluw7MgZWwgZmx1am8uICovXG5leHBvcnQgdHlwZSBNZXRhZ1ZlcmlmeVJlYXNvbiA9XG4gIHwgJ2NvbXBsZXRlZCcgICAgLy8gbGEgdmVyaWZpY2FjacOzbiB0ZXJtaW7DsyBiaWVuXG4gIHwgJ2NhbmNlbGxlZCcgICAgLy8gZWwgdXN1YXJpbyBjZXJyw7MgY29uIGxhIFhcbiAgfCAnYmxvY2tlZCcgICAgICAvLyBzZSBkZXRlY3TDsyB1bmEgY8OhbWFyYSB2aXJ0dWFsIG8gbm8gcGVybWl0aWRhXG4gIHwgJ3Vuc3VwcG9ydGVkJyAgLy8gbGEgY29uZXhpw7NuIHBpZGUgdW4gcGFzbyBxdWUgZXN0YSB2ZXJzacOzbiBhw7puIG5vIHNvcG9ydGFcbiAgfCAnZXJyb3InOyAgICAgICAvLyBmYWxsYSBkZSBjb25maWd1cmFjacOzbiwgZGUgcmVkIG8gZGUgY8OhbWFyYVxuXG4vKiogUmVzdWx0YWRvIHF1ZSByZWNpYmUgbGEgYXBwIGFuZml0cmlvbmEgZW4gZWwgZXZlbnRvIChmaW5pc2hlZCkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFnVmVyaWZ5UmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgcmVhc29uOiBNZXRhZ1ZlcmlmeVJlYXNvbjtcbiAgLyoqIERldGFsbGUgbGVnaWJsZSBkZWwgZXJyb3IsIGN1YW5kbyBhcGxpY2EuICovXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Pantalla de bloqueo cuando se detecta una cámara virtual o no permitida. */
4
+ export class BlockedComponent {
5
+ constructor() {
6
+ this.reason = '';
7
+ this.exit = new EventEmitter();
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BlockedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BlockedComponent, isStandalone: true, selector: "mv-blocked", inputs: { reason: "reason" }, outputs: { exit: "exit" }, ngImport: i0, template: `
11
+ <section class="mv-step">
12
+ <h2 class="mv-title">Bloqueo por seguridad</h2>
13
+ <div class="mv-content">
14
+ <span class="mv-icon" aria-hidden="true">!</span>
15
+ <p class="mv-text">Detectamos una cámara virtual o no permitida durante la inicialización del SDK.</p>
16
+ @if (reason) {
17
+ <p class="mv-text">{{ reason }}</p>
18
+ }
19
+ </div>
20
+ <button type="button" class="mv-button" (click)="exit.emit()">Entiendo</button>
21
+ </section>
22
+ `, isInline: true, styles: [":host{display:block;height:100%;background:var(--mv-surface)}.mv-step{height:100%;max-width:420px;margin:0 auto;padding:max(24px,env(safe-area-inset-top)) 22px max(22px,env(safe-area-inset-bottom));display:flex;flex-direction:column}.mv-title{margin:0;font-family:var(--mv-font);font-size:20px;font-weight:600;letter-spacing:-.025em;line-height:1.2;color:var(--mv-accent)}.mv-content{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center}.mv-icon{width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fdecec;color:var(--mv-accent);font-family:var(--mv-font);font-size:32px;font-weight:700}.mv-text{margin:0;font-family:var(--mv-font);font-size:14px;font-weight:400;line-height:1.5;max-width:300px;color:var(--mv-muted)}.mv-button{height:52px;border:0;border-radius:14px;font-family:var(--mv-font);font-size:15px;font-weight:600;letter-spacing:-.01em;width:100%;background:var(--mv-primary);color:#fff;cursor:pointer;transition:background-color .15s ease,transform .12s ease,opacity .15s ease;flex-shrink:0}.mv-button:hover{background:var(--mv-primary-hover)}.mv-button:active{transform:scale(.985)}.mv-button:disabled{opacity:.5;cursor:default;transform:none}.mv-button:focus-visible{outline:2px solid var(--mv-primary);outline-offset:3px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BlockedComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'mv-blocked', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
27
+ <section class="mv-step">
28
+ <h2 class="mv-title">Bloqueo por seguridad</h2>
29
+ <div class="mv-content">
30
+ <span class="mv-icon" aria-hidden="true">!</span>
31
+ <p class="mv-text">Detectamos una cámara virtual o no permitida durante la inicialización del SDK.</p>
32
+ @if (reason) {
33
+ <p class="mv-text">{{ reason }}</p>
34
+ }
35
+ </div>
36
+ <button type="button" class="mv-button" (click)="exit.emit()">Entiendo</button>
37
+ </section>
38
+ `, styles: [":host{display:block;height:100%;background:var(--mv-surface)}.mv-step{height:100%;max-width:420px;margin:0 auto;padding:max(24px,env(safe-area-inset-top)) 22px max(22px,env(safe-area-inset-bottom));display:flex;flex-direction:column}.mv-title{margin:0;font-family:var(--mv-font);font-size:20px;font-weight:600;letter-spacing:-.025em;line-height:1.2;color:var(--mv-accent)}.mv-content{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center}.mv-icon{width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fdecec;color:var(--mv-accent);font-family:var(--mv-font);font-size:32px;font-weight:700}.mv-text{margin:0;font-family:var(--mv-font);font-size:14px;font-weight:400;line-height:1.5;max-width:300px;color:var(--mv-muted)}.mv-button{height:52px;border:0;border-radius:14px;font-family:var(--mv-font);font-size:15px;font-weight:600;letter-spacing:-.01em;width:100%;background:var(--mv-primary);color:#fff;cursor:pointer;transition:background-color .15s ease,transform .12s ease,opacity .15s ease;flex-shrink:0}.mv-button:hover{background:var(--mv-primary-hover)}.mv-button:active{transform:scale(.985)}.mv-button:disabled{opacity:.5;cursor:default;transform:none}.mv-button:focus-visible{outline:2px solid var(--mv-primary);outline-offset:3px}\n"] }]
39
+ }], propDecorators: { reason: [{
40
+ type: Input
41
+ }], exit: [{
42
+ type: Output
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhZy12ZXJpZnkvc3JjL2xpYi9zY3JlZW5zL2Jsb2NrZWQvYmxvY2tlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFaEcsK0VBQStFO0FBNkUvRSxNQUFNLE9BQU8sZ0JBQWdCO0lBNUU3QjtRQTZFVyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1gsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FDM0M7K0dBSFksZ0JBQWdCO21HQUFoQixnQkFBZ0IsK0hBeEVqQjs7Ozs7Ozs7Ozs7O0dBWVQ7OzRGQTREVSxnQkFBZ0I7a0JBNUU1QixTQUFTOytCQUNFLFlBQVksY0FDVixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sWUFDckM7Ozs7Ozs7Ozs7OztHQVlUOzhCQTZEUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKiBQYW50YWxsYSBkZSBibG9xdWVvIGN1YW5kbyBzZSBkZXRlY3RhIHVuYSBjw6FtYXJhIHZpcnR1YWwgbyBubyBwZXJtaXRpZGEuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1ibG9ja2VkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJtdi1zdGVwXCI+XG4gICAgICA8aDIgY2xhc3M9XCJtdi10aXRsZVwiPkJsb3F1ZW8gcG9yIHNlZ3VyaWRhZDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXYtY29udGVudFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm12LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8cCBjbGFzcz1cIm12LXRleHRcIj5EZXRlY3RhbW9zIHVuYSBjw6FtYXJhIHZpcnR1YWwgbyBubyBwZXJtaXRpZGEgZHVyYW50ZSBsYSBpbmljaWFsaXphY2nDs24gZGVsIFNESy48L3A+XG4gICAgICAgIEBpZiAocmVhc29uKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJtdi10ZXh0XCI+e3sgcmVhc29uIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXYtYnV0dG9uXCIgKGNsaWNrKT1cImV4aXQuZW1pdCgpXCI+RW50aWVuZG88L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG4gIGAsXG4gIHN0eWxlczogYFxuICAgIEB1c2UgJy4uLy4uL3RoZW1lL3Rva2VucycgYXMgbXY7XG5cbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLW12LXN1cmZhY2UpO1xuICAgIH1cblxuICAgIC5tdi1zdGVwIHtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIHBhZGRpbmc6IG1heCgyNHB4LCBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpIDIycHggbWF4KDIycHgsIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG5cbiAgICAubXYtdGl0bGUge1xuICAgICAgQGluY2x1ZGUgbXYudGl0bGU7XG4gICAgICBjb2xvcjogdmFyKC0tbXYtYWNjZW50KTtcbiAgICB9XG5cbiAgICAubXYtY29udGVudCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLm12LWljb24ge1xuICAgICAgd2lkdGg6IDcycHg7XG4gICAgICBoZWlnaHQ6IDcycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgYmFja2dyb3VuZDogI2ZkZWNlYztcbiAgICAgIGNvbG9yOiB2YXIoLS1tdi1hY2NlbnQpO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLW12LWZvbnQpO1xuICAgICAgZm9udC1zaXplOiAzMnB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB9XG5cbiAgICAubXYtdGV4dCB7XG4gICAgICBAaW5jbHVkZSBtdi50ZXh0O1xuICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1tdi1tdXRlZCk7XG4gICAgfVxuXG4gICAgLm12LWJ1dHRvbiB7XG4gICAgICBAaW5jbHVkZSBtdi5wcmltYXJ5LWJ1dHRvbjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQmxvY2tlZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHJlYXNvbiA9ICcnO1xuICBAT3V0cHV0KCkgZXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbn1cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Modal de mensaje (errores). Sin bordes, botón "De acuerdo". */
4
+ export class DialogComponent {
5
+ constructor() {
6
+ this.title = '¡Lo sentimos!';
7
+ this.message = 'No se pudo realizar el proceso.';
8
+ this.buttonLabel = 'De acuerdo';
9
+ this.closed = new EventEmitter();
10
+ }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DialogComponent, isStandalone: true, selector: "mv-dialog", inputs: { title: "title", message: "message", buttonLabel: "buttonLabel" }, outputs: { closed: "closed" }, ngImport: i0, template: `
13
+ <div class="mv-dialog-backdrop">
14
+ <div class="mv-dialog" role="alertdialog" aria-modal="true" aria-labelledby="mv-dialog-title" aria-describedby="mv-dialog-message">
15
+ <span class="mv-dialog-icon" aria-hidden="true">!</span>
16
+ <h2 id="mv-dialog-title" class="mv-dialog-title">{{ title }}</h2>
17
+ <p id="mv-dialog-message" class="mv-dialog-message">{{ message }}</p>
18
+ <button type="button" class="mv-dialog-button" (click)="closed.emit()">{{ buttonLabel }}</button>
19
+ </div>
20
+ </div>
21
+ `, isInline: true, styles: [":host{position:absolute;inset:0;z-index:20}.mv-dialog-backdrop{height:100%;display:flex;align-items:center;justify-content:center;padding:22px;background:#09090b8c;animation:mv-fade .2s ease-out both}.mv-dialog{width:100%;max-width:380px;padding:32px 24px 24px;border-radius:24px;background:#fff;box-shadow:0 24px 60px -12px #0006;display:flex;flex-direction:column;align-items:center;text-align:center;animation:mv-pop .2s ease-out both}.mv-dialog-icon{width:56px;height:56px;margin-bottom:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fdecec;color:var(--mv-accent);font-family:var(--mv-font);font-size:24px;font-weight:700}.mv-dialog-title{margin:0 0 8px;font-family:var(--mv-font);font-size:20px;font-weight:600;letter-spacing:-.025em;line-height:1.2;color:var(--mv-text)}.mv-dialog-message{margin:0 0 20px;font-family:var(--mv-font);font-size:14px;font-weight:400;line-height:1.5;color:var(--mv-muted)}.mv-dialog-button{height:52px;border:0;border-radius:14px;font-family:var(--mv-font);font-size:15px;font-weight:600;letter-spacing:-.01em;width:100%;background:var(--mv-primary);color:#fff;cursor:pointer;transition:background-color .15s ease,transform .12s ease,opacity .15s ease}.mv-dialog-button:hover{background:var(--mv-primary-hover)}.mv-dialog-button:active{transform:scale(.985)}.mv-dialog-button:disabled{opacity:.5;cursor:default;transform:none}.mv-dialog-button:focus-visible{outline:2px solid var(--mv-primary);outline-offset:3px}@keyframes mv-fade{0%{opacity:0}to{opacity:1}}@keyframes mv-pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.mv-dialog-backdrop,.mv-dialog{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, decorators: [{
24
+ type: Component,
25
+ args: [{ selector: 'mv-dialog', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
26
+ <div class="mv-dialog-backdrop">
27
+ <div class="mv-dialog" role="alertdialog" aria-modal="true" aria-labelledby="mv-dialog-title" aria-describedby="mv-dialog-message">
28
+ <span class="mv-dialog-icon" aria-hidden="true">!</span>
29
+ <h2 id="mv-dialog-title" class="mv-dialog-title">{{ title }}</h2>
30
+ <p id="mv-dialog-message" class="mv-dialog-message">{{ message }}</p>
31
+ <button type="button" class="mv-dialog-button" (click)="closed.emit()">{{ buttonLabel }}</button>
32
+ </div>
33
+ </div>
34
+ `, styles: [":host{position:absolute;inset:0;z-index:20}.mv-dialog-backdrop{height:100%;display:flex;align-items:center;justify-content:center;padding:22px;background:#09090b8c;animation:mv-fade .2s ease-out both}.mv-dialog{width:100%;max-width:380px;padding:32px 24px 24px;border-radius:24px;background:#fff;box-shadow:0 24px 60px -12px #0006;display:flex;flex-direction:column;align-items:center;text-align:center;animation:mv-pop .2s ease-out both}.mv-dialog-icon{width:56px;height:56px;margin-bottom:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fdecec;color:var(--mv-accent);font-family:var(--mv-font);font-size:24px;font-weight:700}.mv-dialog-title{margin:0 0 8px;font-family:var(--mv-font);font-size:20px;font-weight:600;letter-spacing:-.025em;line-height:1.2;color:var(--mv-text)}.mv-dialog-message{margin:0 0 20px;font-family:var(--mv-font);font-size:14px;font-weight:400;line-height:1.5;color:var(--mv-muted)}.mv-dialog-button{height:52px;border:0;border-radius:14px;font-family:var(--mv-font);font-size:15px;font-weight:600;letter-spacing:-.01em;width:100%;background:var(--mv-primary);color:#fff;cursor:pointer;transition:background-color .15s ease,transform .12s ease,opacity .15s ease}.mv-dialog-button:hover{background:var(--mv-primary-hover)}.mv-dialog-button:active{transform:scale(.985)}.mv-dialog-button:disabled{opacity:.5;cursor:default;transform:none}.mv-dialog-button:focus-visible{outline:2px solid var(--mv-primary);outline-offset:3px}@keyframes mv-fade{0%{opacity:0}to{opacity:1}}@keyframes mv-pop{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.mv-dialog-backdrop,.mv-dialog{animation:none}}\n"] }]
35
+ }], propDecorators: { title: [{
36
+ type: Input
37
+ }], message: [{
38
+ type: Input
39
+ }], buttonLabel: [{
40
+ type: Input
41
+ }], closed: [{
42
+ type: Output
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGFnLXZlcmlmeS9zcmMvbGliL3NjcmVlbnMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFaEcsa0VBQWtFO0FBdUZsRSxNQUFNLE9BQU8sZUFBZTtJQXRGNUI7UUF1RlcsVUFBSyxHQUFHLGVBQWUsQ0FBQztRQUN4QixZQUFPLEdBQUcsaUNBQWlDLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxZQUFZLENBQUM7UUFDMUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FDN0M7K0dBTFksZUFBZTttR0FBZixlQUFlLGdMQWxGaEI7Ozs7Ozs7OztHQVNUOzs0RkF5RVUsZUFBZTtrQkF0RjNCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7O0dBU1Q7OEJBMEVRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIE1vZGFsIGRlIG1lbnNhamUgKGVycm9yZXMpLiBTaW4gYm9yZGVzLCBib3TDs24gXCJEZSBhY3VlcmRvXCIuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1kaWFsb2cnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibXYtZGlhbG9nLWJhY2tkcm9wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibXYtZGlhbG9nXCIgcm9sZT1cImFsZXJ0ZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJtdi1kaWFsb2ctdGl0bGVcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXYtZGlhbG9nLW1lc3NhZ2VcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtdi1kaWFsb2ctaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiE8L3NwYW4+XG4gICAgICAgIDxoMiBpZD1cIm12LWRpYWxvZy10aXRsZVwiIGNsYXNzPVwibXYtZGlhbG9nLXRpdGxlXCI+e3sgdGl0bGUgfX08L2gyPlxuICAgICAgICA8cCBpZD1cIm12LWRpYWxvZy1tZXNzYWdlXCIgY2xhc3M9XCJtdi1kaWFsb2ctbWVzc2FnZVwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibXYtZGlhbG9nLWJ1dHRvblwiIChjbGljayk9XCJjbG9zZWQuZW1pdCgpXCI+e3sgYnV0dG9uTGFiZWwgfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IGBcbiAgICBAdXNlICcuLi8uLi90aGVtZS90b2tlbnMnIGFzIG12O1xuXG4gICAgOmhvc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgICB6LWluZGV4OiAyMDtcbiAgICB9XG5cbiAgICAubXYtZGlhbG9nLWJhY2tkcm9wIHtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAyMnB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSg5LCA5LCAxMSwgMC41NSk7XG4gICAgICBhbmltYXRpb246IG12LWZhZGUgMC4ycyBlYXNlLW91dCBib3RoO1xuICAgIH1cblxuICAgIC5tdi1kaWFsb2cge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXgtd2lkdGg6IDM4MHB4O1xuICAgICAgcGFkZGluZzogMzJweCAyNHB4IDI0cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAyNHB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMjRweCA2MHB4IC0xMnB4IHJnYmEoMCwgMCwgMCwgMC40KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGFuaW1hdGlvbjogbXYtcG9wIDAuMnMgZWFzZS1vdXQgYm90aDtcbiAgICB9XG5cbiAgICAubXYtZGlhbG9nLWljb24ge1xuICAgICAgd2lkdGg6IDU2cHg7XG4gICAgICBoZWlnaHQ6IDU2cHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGJhY2tncm91bmQ6ICNmZGVjZWM7XG4gICAgICBjb2xvcjogdmFyKC0tbXYtYWNjZW50KTtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tdi1mb250KTtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgfVxuXG4gICAgLm12LWRpYWxvZy10aXRsZSB7XG4gICAgICBAaW5jbHVkZSBtdi50aXRsZTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1tdi10ZXh0KTtcbiAgICB9XG5cbiAgICAubXYtZGlhbG9nLW1lc3NhZ2Uge1xuICAgICAgQGluY2x1ZGUgbXYudGV4dDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICAgICBjb2xvcjogdmFyKC0tbXYtbXV0ZWQpO1xuICAgIH1cblxuICAgIC5tdi1kaWFsb2ctYnV0dG9uIHtcbiAgICAgIEBpbmNsdWRlIG12LnByaW1hcnktYnV0dG9uO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgbXYtZmFkZSB7IGZyb20geyBvcGFjaXR5OiAwOyB9IHRvIHsgb3BhY2l0eTogMTsgfSB9XG4gICAgQGtleWZyYW1lcyBtdi1wb3AgeyBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OCk7IH0gdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0gfVxuXG4gICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAgIC5tdi1kaWFsb2ctYmFja2Ryb3AsIC5tdi1kaWFsb2cgeyBhbmltYXRpb246IG5vbmU7IH1cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRpdGxlID0gJ8KhTG8gc2VudGltb3MhJztcbiAgQElucHV0KCkgbWVzc2FnZSA9ICdObyBzZSBwdWRvIHJlYWxpemFyIGVsIHByb2Nlc28uJztcbiAgQElucHV0KCkgYnV0dG9uTGFiZWwgPSAnRGUgYWN1ZXJkbyc7XG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { METAG_LOGO_DATA_URI } from '../../theme/brand';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Pantalla inicial mientras se consulta la configuración e inicia el proceso.
6
+ * Muestra el logo "MetaG" (SVG) con una animación de entrada.
7
+ */
8
+ export class LoadingComponent {
9
+ constructor() {
10
+ this.logo = METAG_LOGO_DATA_URI;
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoadingComponent, isStandalone: true, selector: "mv-loading", ngImport: i0, template: `
14
+ <div class="mv-brand" role="status" aria-live="polite">
15
+ <span class="mv-sr-only">Comencemos...</span>
16
+ <img class="mv-brand-logo" [src]="logo" alt="" aria-hidden="true" />
17
+ </div>
18
+ <p class="mv-signature">Fundación Génesis Empresarial</p>
19
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;align-items:center;justify-content:center;height:100%;background:var(--mv-surface)}.mv-signature{position:absolute;left:16px;right:16px;bottom:max(24px,env(safe-area-inset-bottom));margin:0;font-family:var(--mv-font);font-size:18px;font-weight:400;letter-spacing:.01em;color:#a1a1aa;text-align:center;animation:mv-brand-in .5s ease-out .25s both}.mv-brand{animation:mv-brand-in .5s ease-out both}.mv-brand-logo{display:block;height:44px;width:auto}.mv-sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes mv-brand-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (min-width: 768px){.mv-brand-logo{height:52px}}@media (prefers-reduced-motion: reduce){.mv-brand,.mv-signature{animation:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoadingComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'mv-loading', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
24
+ <div class="mv-brand" role="status" aria-live="polite">
25
+ <span class="mv-sr-only">Comencemos...</span>
26
+ <img class="mv-brand-logo" [src]="logo" alt="" aria-hidden="true" />
27
+ </div>
28
+ <p class="mv-signature">Fundación Génesis Empresarial</p>
29
+ `, styles: ["@charset \"UTF-8\";:host{position:relative;display:flex;align-items:center;justify-content:center;height:100%;background:var(--mv-surface)}.mv-signature{position:absolute;left:16px;right:16px;bottom:max(24px,env(safe-area-inset-bottom));margin:0;font-family:var(--mv-font);font-size:18px;font-weight:400;letter-spacing:.01em;color:#a1a1aa;text-align:center;animation:mv-brand-in .5s ease-out .25s both}.mv-brand{animation:mv-brand-in .5s ease-out both}.mv-brand-logo{display:block;height:44px;width:auto}.mv-sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@keyframes mv-brand-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (min-width: 768px){.mv-brand-logo{height:52px}}@media (prefers-reduced-motion: reduce){.mv-brand,.mv-signature{animation:none}}\n"] }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhZy12ZXJpZnkvc3JjL2xpYi9zY3JlZW5zL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFeEQ7OztHQUdHO0FBdUVILE1BQU0sT0FBTyxnQkFBZ0I7SUF0RTdCO1FBdUVXLFNBQUksR0FBRyxtQkFBbUIsQ0FBQztLQUNyQzsrR0FGWSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixzRUFsRWpCOzs7Ozs7R0FNVDs7NEZBNERVLGdCQUFnQjtrQkF0RTVCLFNBQVM7K0JBQ0UsWUFBWSxjQUNWLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7O0dBTVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNRVRBR19MT0dPX0RBVEFfVVJJIH0gZnJvbSAnLi4vLi4vdGhlbWUvYnJhbmQnO1xuXG4vKipcbiAqIFBhbnRhbGxhIGluaWNpYWwgbWllbnRyYXMgc2UgY29uc3VsdGEgbGEgY29uZmlndXJhY2nDs24gZSBpbmljaWEgZWwgcHJvY2Vzby5cbiAqIE11ZXN0cmEgZWwgbG9nbyBcIk1ldGFHXCIgKFNWRykgY29uIHVuYSBhbmltYWNpw7NuIGRlIGVudHJhZGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LWxvYWRpbmcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibXYtYnJhbmRcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm12LXNyLW9ubHlcIj5Db21lbmNlbW9zLi4uPC9zcGFuPlxuICAgICAgPGltZyBjbGFzcz1cIm12LWJyYW5kLWxvZ29cIiBbc3JjXT1cImxvZ29cIiBhbHQ9XCJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwibXYtc2lnbmF0dXJlXCI+RnVuZGFjacOzbiBHw6luZXNpcyBFbXByZXNhcmlhbDwvcD5cbiAgYCxcbiAgc3R5bGVzOiBgXG4gICAgOmhvc3Qge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLW12LXN1cmZhY2UpO1xuICAgIH1cblxuICAgIC8qIEZpcm1hIHN1dGlsIGFsIHBpZSBkZSBsYSBwYW50YWxsYS4gKi9cbiAgICAubXYtc2lnbmF0dXJlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGxlZnQ6IDE2cHg7XG4gICAgICByaWdodDogMTZweDtcbiAgICAgIGJvdHRvbTogbWF4KDI0cHgsIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tbXYtZm9udCk7XG4gICAgICBmb250LXNpemU6IDE4cHg7IC8qIG1pc21vIHRhbWHDsW8gcXVlIGVsIGJvdMOzbiBcIlRvbWFyIEZvdG9ncmFmw61hXCIgKi9cbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtO1xuICAgICAgY29sb3I6ICNhMWExYWE7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbmltYXRpb246IG12LWJyYW5kLWluIDAuNXMgZWFzZS1vdXQgMC4yNXMgYm90aDtcbiAgICB9XG5cbiAgICAubXYtYnJhbmQge1xuICAgICAgYW5pbWF0aW9uOiBtdi1icmFuZC1pbiAwLjVzIGVhc2Utb3V0IGJvdGg7XG4gICAgfVxuXG4gICAgLm12LWJyYW5kLWxvZ28ge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICAubXYtc3Itb25seSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxuXG4gICAgQGtleWZyYW1lcyBtdi1icmFuZC1pbiB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCk7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gICAgICAubXYtYnJhbmQtbG9nbyB7IGhlaWdodDogNTJweDsgfVxuICAgIH1cblxuICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgICAubXYtYnJhbmQsIC5tdi1zaWduYXR1cmUgeyBhbmltYXRpb246IG5vbmU7IH1cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIExvYWRpbmdDb21wb25lbnQge1xuICByZWFkb25seSBsb2dvID0gTUVUQUdfTE9HT19EQVRBX1VSSTtcbn1cbiJdfQ==