valtech-components 4.0.96 → 4.0.98

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3ZlcmlmeS12aWV3L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFZlcmlmeVZpZXdNZXRhZGF0YSB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbiAgcHVycG9zZT86ICdlbWFpbCc7XG4gIHNob3dDYXJkPzogYm9vbGVhbjtcbiAgcmVkaXJlY3RPblN1Y2Nlc3M/OiBzdHJpbmc7XG4gIGxvZ2luUGF0aD86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,210 @@
1
+ import { ChangeDetectionStrategy, Component, inject, Input, output, signal } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { Router } from '@angular/router';
4
+ import { IonIcon, IonSpinner } from '@ionic/angular/standalone';
5
+ import { addIcons } from 'ionicons';
6
+ import { checkmarkCircleOutline, warningOutline } from 'ionicons/icons';
7
+ import { firstValueFrom } from 'rxjs';
8
+ import { AuthService } from '../../../services/auth/auth.service';
9
+ import { I18nService } from '../../../services/i18n';
10
+ import { VERIFY_VIEW_I18N } from './verify-view.i18n';
11
+ import * as i0 from "@angular/core";
12
+ const NS = 'VerifyView';
13
+ export class VerifyViewComponent {
14
+ constructor() {
15
+ this.onSuccess = output();
16
+ this.auth = inject(AuthService);
17
+ this.router = inject(Router);
18
+ this.i18n = inject(I18nService);
19
+ this.state = signal('verifying');
20
+ this.errorMessage = signal('');
21
+ this.errorCode = signal('');
22
+ this.resendSent = signal(false);
23
+ this.resending = signal(false);
24
+ this.maskedEmail = () => {
25
+ const email = this.props?.email ?? '';
26
+ const atIdx = email.indexOf('@');
27
+ if (atIdx < 0)
28
+ return email;
29
+ const local = email.slice(0, atIdx);
30
+ const domain = email.slice(atIdx);
31
+ const visible = local.slice(0, Math.min(2, local.length));
32
+ return `${visible}***${domain}`;
33
+ };
34
+ this.i18n.registerDefaults(NS, VERIFY_VIEW_I18N);
35
+ addIcons({ checkmarkCircleOutline, warningOutline });
36
+ }
37
+ ngOnInit() {
38
+ void this.runVerify();
39
+ }
40
+ t(key) {
41
+ return this.i18n.t(key, NS);
42
+ }
43
+ async runVerify() {
44
+ try {
45
+ await firstValueFrom(this.auth.verifyEmail({ email: this.props.email, code: this.props.code }));
46
+ this.state.set('success');
47
+ }
48
+ catch (err) {
49
+ const { message, key } = this.resolveError(err);
50
+ this.state.set('error');
51
+ this.errorMessage.set(message);
52
+ this.errorCode.set(key);
53
+ }
54
+ }
55
+ onContinue() {
56
+ this.onSuccess.emit();
57
+ if (this.props.redirectOnSuccess) {
58
+ void this.router.navigateByUrl(this.props.redirectOnSuccess, { replaceUrl: true });
59
+ }
60
+ }
61
+ onGoToLogin() {
62
+ const loginPath = this.props.loginPath ?? '/login';
63
+ void this.router.navigateByUrl(loginPath, { replaceUrl: true });
64
+ }
65
+ async onResend() {
66
+ this.resending.set(true);
67
+ try {
68
+ await firstValueFrom(this.auth.resendCode({ email: this.props.email, type: 'EMAIL_VERIFY' }));
69
+ this.resendSent.set(true);
70
+ }
71
+ catch {
72
+ // ignore resend errors silently — user can retry
73
+ }
74
+ finally {
75
+ this.resending.set(false);
76
+ }
77
+ }
78
+ resolveError(err) {
79
+ if (err && typeof err === 'object') {
80
+ const code = err['code'];
81
+ const keyMap = {
82
+ INVALID_CODE: 'invalidCode',
83
+ AUTHV2_INVALID_CODE: 'invalidCode',
84
+ EXPIRED_CODE: 'expiredCode',
85
+ CODE_EXPIRED: 'expiredCode',
86
+ AUTHV2_CODE_EXPIRED: 'expiredCode',
87
+ ALREADY_VERIFIED: 'alreadyVerified',
88
+ AUTHV2_ALREADY_VERIFIED: 'alreadyVerified',
89
+ TOO_MANY_ATTEMPTS: 'tooManyAttempts',
90
+ AUTHV2_TOO_MANY_ATTEMPTS: 'tooManyAttempts',
91
+ RATE_LIMITED: 'tooManyAttempts',
92
+ };
93
+ if (code && keyMap[code]) {
94
+ const key = keyMap[code];
95
+ return { message: this.t(key), key };
96
+ }
97
+ const msg = err['message'];
98
+ if (msg)
99
+ return { message: msg, key: 'unknown' };
100
+ }
101
+ return { message: this.t('unknownError'), key: 'unknown' };
102
+ }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VerifyViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VerifyViewComponent, isStandalone: true, selector: "val-verify-view", inputs: { props: "props" }, outputs: { onSuccess: "onSuccess" }, ngImport: i0, template: `
105
+ <div class="verify-view" [class.verify-view--card]="props.showCard">
106
+ @if (state() === 'verifying') {
107
+ <div class="verify-view__state">
108
+ <ion-spinner name="crescent" class="verify-view__spinner" />
109
+ <p class="verify-view__title">{{ t('verifying') }}</p>
110
+ <p class="verify-view__subtitle verify-view__subtitle--muted">{{ maskedEmail() }}</p>
111
+ </div>
112
+ }
113
+
114
+ @if (state() === 'success') {
115
+ <div class="verify-view__state">
116
+ <ion-icon name="checkmark-circle-outline" class="verify-view__icon verify-view__icon--success" />
117
+ <p class="verify-view__title">{{ t('successTitle') }}</p>
118
+ <p class="verify-view__subtitle verify-view__subtitle--muted">{{ t('successSubtitle') }}</p>
119
+ <button type="button" class="verify-view__btn verify-view__btn--primary" (click)="onContinue()">
120
+ {{ t('continueBtn') }}
121
+ </button>
122
+ </div>
123
+ }
124
+
125
+ @if (state() === 'error') {
126
+ <div class="verify-view__state">
127
+ <ion-icon name="warning-outline" class="verify-view__icon verify-view__icon--warning" />
128
+ <p class="verify-view__title">{{ t('errorTitle') }}</p>
129
+ <p class="verify-view__subtitle verify-view__subtitle--error">{{ errorMessage() }}</p>
130
+ @if (errorCode() === 'alreadyVerified') {
131
+ <button type="button" class="verify-view__btn verify-view__btn--primary" (click)="onGoToLogin()">
132
+ {{ t('goToLogin') }}
133
+ </button>
134
+ } @else if (resendSent()) {
135
+ <p class="verify-view__subtitle verify-view__subtitle--success">{{ t('codeSent') }}</p>
136
+ } @else {
137
+ <button
138
+ type="button"
139
+ class="verify-view__btn verify-view__btn--outline"
140
+ [disabled]="resending()"
141
+ (click)="onResend()"
142
+ >
143
+ @if (resending()) {
144
+ <ion-spinner name="crescent" class="verify-view__btn-spinner" />
145
+ } @else {
146
+ {{ t('resend') }}
147
+ }
148
+ </button>
149
+ }
150
+ </div>
151
+ }
152
+ </div>
153
+ `, isInline: true, styles: [":host{display:block;width:100%}.verify-view{display:flex;flex-direction:column;align-items:center;padding:1.5rem;width:100%;box-sizing:border-box}.verify-view--card{background:var(--ion-card-background, var(--ion-background-color, #fff));border-radius:12px;box-shadow:0 2px 8px #00000014;max-width:var(--val-container-sm, 540px);margin-left:auto;margin-right:auto;padding:2rem}.verify-view__state{display:flex;flex-direction:column;align-items:center;gap:1rem;width:100%;text-align:center}.verify-view__spinner{--color: var(--ion-color-primary, #ff00b2);width:3rem;height:3rem}.verify-view__icon{font-size:3.5rem}.verify-view__icon--success{color:var(--ion-color-success, #2dd36f)}.verify-view__icon--warning{color:var(--ion-color-warning, #ffc409)}.verify-view__title{color:var(--ion-color-dark, #2f2a36);font-size:1.25rem;font-weight:700;margin:0;line-height:1.3}.verify-view__subtitle{font-size:.9375rem;line-height:1.5;margin:0}.verify-view__subtitle--muted{color:var(--ion-color-medium, #6b6675)}.verify-view__subtitle--error{color:var(--ion-color-danger, #eb445a)}.verify-view__subtitle--success{color:var(--ion-color-success, #2dd36f);font-weight:500}.verify-view__btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:1rem;font-weight:600;gap:.5rem;justify-content:center;margin-top:.5rem;min-height:48px;padding:.75rem 2rem;transition:background-color .12s ease,opacity .12s ease;width:100%;max-width:320px}.verify-view__btn:disabled{cursor:not-allowed;opacity:.6}.verify-view__btn--primary{background:var(--ion-color-primary, #ff00b2);color:var(--ion-color-primary-contrast, #fff)}.verify-view__btn--primary:hover:not(:disabled){background:var(--ion-color-primary-shade, #b5007f)}.verify-view__btn--outline{background:transparent;border:1.5px solid var(--ion-color-primary, #ff00b2);color:var(--ion-color-primary, #ff00b2)}.verify-view__btn--outline:hover:not(:disabled){background:rgba(var(--ion-color-primary-rgb, 255, 0, 178),.08)}.verify-view__btn-spinner{--color: currentColor;width:1.25rem;height:1.25rem}@media (max-width: 480px){.verify-view--card{padding:1.5rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VerifyViewComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'val-verify-view', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, IonIcon, IonSpinner], template: `
158
+ <div class="verify-view" [class.verify-view--card]="props.showCard">
159
+ @if (state() === 'verifying') {
160
+ <div class="verify-view__state">
161
+ <ion-spinner name="crescent" class="verify-view__spinner" />
162
+ <p class="verify-view__title">{{ t('verifying') }}</p>
163
+ <p class="verify-view__subtitle verify-view__subtitle--muted">{{ maskedEmail() }}</p>
164
+ </div>
165
+ }
166
+
167
+ @if (state() === 'success') {
168
+ <div class="verify-view__state">
169
+ <ion-icon name="checkmark-circle-outline" class="verify-view__icon verify-view__icon--success" />
170
+ <p class="verify-view__title">{{ t('successTitle') }}</p>
171
+ <p class="verify-view__subtitle verify-view__subtitle--muted">{{ t('successSubtitle') }}</p>
172
+ <button type="button" class="verify-view__btn verify-view__btn--primary" (click)="onContinue()">
173
+ {{ t('continueBtn') }}
174
+ </button>
175
+ </div>
176
+ }
177
+
178
+ @if (state() === 'error') {
179
+ <div class="verify-view__state">
180
+ <ion-icon name="warning-outline" class="verify-view__icon verify-view__icon--warning" />
181
+ <p class="verify-view__title">{{ t('errorTitle') }}</p>
182
+ <p class="verify-view__subtitle verify-view__subtitle--error">{{ errorMessage() }}</p>
183
+ @if (errorCode() === 'alreadyVerified') {
184
+ <button type="button" class="verify-view__btn verify-view__btn--primary" (click)="onGoToLogin()">
185
+ {{ t('goToLogin') }}
186
+ </button>
187
+ } @else if (resendSent()) {
188
+ <p class="verify-view__subtitle verify-view__subtitle--success">{{ t('codeSent') }}</p>
189
+ } @else {
190
+ <button
191
+ type="button"
192
+ class="verify-view__btn verify-view__btn--outline"
193
+ [disabled]="resending()"
194
+ (click)="onResend()"
195
+ >
196
+ @if (resending()) {
197
+ <ion-spinner name="crescent" class="verify-view__btn-spinner" />
198
+ } @else {
199
+ {{ t('resend') }}
200
+ }
201
+ </button>
202
+ }
203
+ </div>
204
+ }
205
+ </div>
206
+ `, styles: [":host{display:block;width:100%}.verify-view{display:flex;flex-direction:column;align-items:center;padding:1.5rem;width:100%;box-sizing:border-box}.verify-view--card{background:var(--ion-card-background, var(--ion-background-color, #fff));border-radius:12px;box-shadow:0 2px 8px #00000014;max-width:var(--val-container-sm, 540px);margin-left:auto;margin-right:auto;padding:2rem}.verify-view__state{display:flex;flex-direction:column;align-items:center;gap:1rem;width:100%;text-align:center}.verify-view__spinner{--color: var(--ion-color-primary, #ff00b2);width:3rem;height:3rem}.verify-view__icon{font-size:3.5rem}.verify-view__icon--success{color:var(--ion-color-success, #2dd36f)}.verify-view__icon--warning{color:var(--ion-color-warning, #ffc409)}.verify-view__title{color:var(--ion-color-dark, #2f2a36);font-size:1.25rem;font-weight:700;margin:0;line-height:1.3}.verify-view__subtitle{font-size:.9375rem;line-height:1.5;margin:0}.verify-view__subtitle--muted{color:var(--ion-color-medium, #6b6675)}.verify-view__subtitle--error{color:var(--ion-color-danger, #eb445a)}.verify-view__subtitle--success{color:var(--ion-color-success, #2dd36f);font-weight:500}.verify-view__btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:1rem;font-weight:600;gap:.5rem;justify-content:center;margin-top:.5rem;min-height:48px;padding:.75rem 2rem;transition:background-color .12s ease,opacity .12s ease;width:100%;max-width:320px}.verify-view__btn:disabled{cursor:not-allowed;opacity:.6}.verify-view__btn--primary{background:var(--ion-color-primary, #ff00b2);color:var(--ion-color-primary-contrast, #fff)}.verify-view__btn--primary:hover:not(:disabled){background:var(--ion-color-primary-shade, #b5007f)}.verify-view__btn--outline{background:transparent;border:1.5px solid var(--ion-color-primary, #ff00b2);color:var(--ion-color-primary, #ff00b2)}.verify-view__btn--outline:hover:not(:disabled){background:rgba(var(--ion-color-primary-rgb, 255, 0, 178),.08)}.verify-view__btn-spinner{--color: currentColor;width:1.25rem;height:1.25rem}@media (max-width: 480px){.verify-view--card{padding:1.5rem}}\n"] }]
207
+ }], ctorParameters: () => [], propDecorators: { props: [{
208
+ type: Input
209
+ }] } });
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy92ZXJpZnktdmlldy92ZXJpZnktdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLdEQsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDO0FBbU14QixNQUFNLE9BQU8sbUJBQW1CO0lBeUI5QjtRQXRCUyxjQUFTLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFFNUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENB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QUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDdkMsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFJLEdBQStCLENBQUMsU0FBUyxDQUF1QixDQUFDO1lBQzlFLElBQUksR0FBRztnQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDN0QsQ0FBQzsrR0FqR1UsbUJBQW1CO21HQUFuQixtQkFBbUIsNElBNUxwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVCx5cEVBbERTLFlBQVksK0JBQUUsT0FBTywySkFBRSxVQUFVOzs0RkE2TGhDLG1CQUFtQjtrQkFqTS9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsWUFDbEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRFQ7d0RBNElRLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSW9uSWNvbiwgSW9uU3Bpbm5lciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjaGVja21hcmtDaXJjbGVPdXRsaW5lLCB3YXJuaW5nT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IFZFUklGWV9WSUVXX0kxOE4gfSBmcm9tICcuL3ZlcmlmeS12aWV3LmkxOG4nO1xuaW1wb3J0IHsgVmVyaWZ5Vmlld01ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbnR5cGUgVmVyaWZ5U3RhdGUgPSAndmVyaWZ5aW5nJyB8ICdzdWNjZXNzJyB8ICdlcnJvcic7XG5cbmNvbnN0IE5TID0gJ1ZlcmlmeVZpZXcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdmVyaWZ5LXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uSWNvbiwgSW9uU3Bpbm5lcl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInZlcmlmeS12aWV3XCIgW2NsYXNzLnZlcmlmeS12aWV3LS1jYXJkXT1cInByb3BzLnNob3dDYXJkXCI+XG4gICAgICBAaWYgKHN0YXRlKCkgPT09ICd2ZXJpZnlpbmcnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJpZnktdmlld19fc3RhdGVcIj5cbiAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgY2xhc3M9XCJ2ZXJpZnktdmlld19fc3Bpbm5lclwiIC8+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ2ZXJpZnktdmlld19fdGl0bGVcIj57eyB0KCd2ZXJpZnlpbmcnKSB9fTwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmeS12aWV3X19zdWJ0aXRsZSB2ZXJpZnktdmlld19fc3VidGl0bGUtLW11dGVkXCI+e3sgbWFza2VkRW1haWwoKSB9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc3RhdGUoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJpZnktdmlld19fc3RhdGVcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFyay1jaXJjbGUtb3V0bGluZVwiIGNsYXNzPVwidmVyaWZ5LXZpZXdfX2ljb24gdmVyaWZ5LXZpZXdfX2ljb24tLXN1Y2Nlc3NcIiAvPlxuICAgICAgICAgIDxwIGNsYXNzPVwidmVyaWZ5LXZpZXdfX3RpdGxlXCI+e3sgdCgnc3VjY2Vzc1RpdGxlJykgfX08L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ2ZXJpZnktdmlld19fc3VidGl0bGUgdmVyaWZ5LXZpZXdfX3N1YnRpdGxlLS1tdXRlZFwiPnt7IHQoJ3N1Y2Nlc3NTdWJ0aXRsZScpIH19PC9wPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmVyaWZ5LXZpZXdfX2J0biB2ZXJpZnktdmlld19fYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uQ29udGludWUoKVwiPlxuICAgICAgICAgICAge3sgdCgnY29udGludWVCdG4nKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzdGF0ZSgpID09PSAnZXJyb3InKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJpZnktdmlld19fc3RhdGVcIj5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIndhcm5pbmctb3V0bGluZVwiIGNsYXNzPVwidmVyaWZ5LXZpZXdfX2ljb24gdmVyaWZ5LXZpZXdfX2ljb24tLXdhcm5pbmdcIiAvPlxuICAgICAgICAgIDxwIGNsYXNzPVwidmVyaWZ5LXZpZXdfX3RpdGxlXCI+e3sgdCgnZXJyb3JUaXRsZScpIH19PC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwidmVyaWZ5LXZpZXdfX3N1YnRpdGxlIHZlcmlmeS12aWV3X19zdWJ0aXRsZS0tZXJyb3JcIj57eyBlcnJvck1lc3NhZ2UoKSB9fTwvcD5cbiAgICAgICAgICBAaWYgKGVycm9yQ29kZSgpID09PSAnYWxyZWFkeVZlcmlmaWVkJykge1xuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2ZXJpZnktdmlld19fYnRuIHZlcmlmeS12aWV3X19idG4tLXByaW1hcnlcIiAoY2xpY2spPVwib25Hb1RvTG9naW4oKVwiPlxuICAgICAgICAgICAgICB7eyB0KCdnb1RvTG9naW4nKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfSBAZWxzZSBpZiAocmVzZW5kU2VudCgpKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmeS12aWV3X19zdWJ0aXRsZSB2ZXJpZnktdmlld19fc3VidGl0bGUtLXN1Y2Nlc3NcIj57eyB0KCdjb2RlU2VudCcpIH19PC9wPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJpZnktdmlld19fYnRuIHZlcmlmeS12aWV3X19idG4tLW91dGxpbmVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVzZW5kaW5nKClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25SZXNlbmQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAocmVzZW5kaW5nKCkpIHtcbiAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgY2xhc3M9XCJ2ZXJpZnktdmlld19fYnRuLXNwaW5uZXJcIiAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyB0KCdyZXNlbmQnKSB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnZlcmlmeS12aWV3IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMS41cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIH1cblxuICAgICAgLnZlcmlmeS12aWV3LS1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wOCk7XG4gICAgICAgIG1heC13aWR0aDogdmFyKC0tdmFsLWNvbnRhaW5lci1zbSwgNTQwcHgpO1xuICAgICAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAycmVtO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX3N0YXRlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX3NwaW5uZXIge1xuICAgICAgICAtLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgI2ZmMDBiMik7XG4gICAgICAgIHdpZHRoOiAzcmVtO1xuICAgICAgICBoZWlnaHQ6IDNyZW07XG4gICAgICB9XG5cbiAgICAgIC52ZXJpZnktdmlld19faWNvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMy41cmVtO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2ljb24tLXN1Y2Nlc3Mge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MsICMyZGQzNmYpO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2ljb24tLXdhcm5pbmcge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmcsICNmZmM0MDkpO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX3RpdGxlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMmYyYTM2KTtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICB9XG5cbiAgICAgIC52ZXJpZnktdmlld19fc3VidGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX3N1YnRpdGxlLS1tdXRlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLCAjNmI2Njc1KTtcbiAgICAgIH1cblxuICAgICAgLnZlcmlmeS12aWV3X19zdWJ0aXRsZS0tZXJyb3Ige1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhbmdlciwgI2ViNDQ1YSk7XG4gICAgICB9XG5cbiAgICAgIC52ZXJpZnktdmlld19fc3VidGl0bGUtLXN1Y2Nlc3Mge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXN1Y2Nlc3MsICMyZGQzNmYpO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2J0biB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWFyZ2luLXRvcDogMC41cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiA0OHB4O1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDJyZW07XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLFxuICAgICAgICAgIG9wYWNpdHkgMTIwbXMgZWFzZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMzIwcHg7XG4gICAgICB9XG5cbiAgICAgIC52ZXJpZnktdmlld19fYnRuOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2J0bi0tcHJpbWFyeSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjZmYwMGIyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LWNvbnRyYXN0LCAjZmZmKTtcbiAgICAgIH1cblxuICAgICAgLnZlcmlmeS12aWV3X19idG4tLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1zaGFkZSwgI2I1MDA3Zik7XG4gICAgICB9XG5cbiAgICAgIC52ZXJpZnktdmlld19fYnRuLS1vdXRsaW5lIHtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICNmZjAwYjIpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICNmZjAwYjIpO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2J0bi0tb3V0bGluZTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiLCAyNTUsIDAsIDE3OCksIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAudmVyaWZ5LXZpZXdfX2J0bi1zcGlubmVyIHtcbiAgICAgICAgLS1jb2xvcjogY3VycmVudENvbG9yO1xuICAgICAgICB3aWR0aDogMS4yNXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAgICAgLnZlcmlmeS12aWV3LS1jYXJkIHtcbiAgICAgICAgICBwYWRkaW5nOiAxLjVyZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBWZXJpZnlWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHMhOiBWZXJpZnlWaWV3TWV0YWRhdGE7XG5cbiAgcmVhZG9ubHkgb25TdWNjZXNzID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICByZWFkb25seSBzdGF0ZSA9IHNpZ25hbDxWZXJpZnlTdGF0ZT4oJ3ZlcmlmeWluZycpO1xuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGVycm9yQ29kZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgcmVzZW5kU2VudCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHJlc2VuZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcmVhZG9ubHkgbWFza2VkRW1haWwgPSAoKSA9PiB7XG4gICAgY29uc3QgZW1haWwgPSB0aGlzLnByb3BzPy5lbWFpbCA/PyAnJztcbiAgICBjb25zdCBhdElkeCA9IGVtYWlsLmluZGV4T2YoJ0AnKTtcbiAgICBpZiAoYXRJZHggPCAwKSByZXR1cm4gZW1haWw7XG4gICAgY29uc3QgbG9jYWwgPSBlbWFpbC5zbGljZSgwLCBhdElkeCk7XG4gICAgY29uc3QgZG9tYWluID0gZW1haWwuc2xpY2UoYXRJZHgpO1xuICAgIGNvbnN0IHZpc2libGUgPSBsb2NhbC5zbGljZSgwLCBNYXRoLm1pbigyLCBsb2NhbC5sZW5ndGgpKTtcbiAgICByZXR1cm4gYCR7dmlzaWJsZX0qKioke2RvbWFpbn1gO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKE5TLCBWRVJJRllfVklFV19JMThOKTtcbiAgICBhZGRJY29ucyh7IGNoZWNrbWFya0NpcmNsZU91dGxpbmUsIHdhcm5pbmdPdXRsaW5lIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLnJ1blZlcmlmeSgpO1xuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgTlMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5WZXJpZnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC52ZXJpZnlFbWFpbCh7IGVtYWlsOiB0aGlzLnByb3BzLmVtYWlsLCBjb2RlOiB0aGlzLnByb3BzLmNvZGUgfSkpO1xuICAgICAgdGhpcy5zdGF0ZS5zZXQoJ3N1Y2Nlc3MnKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHsgbWVzc2FnZSwga2V5IH0gPSB0aGlzLnJlc29sdmVFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zdGF0ZS5zZXQoJ2Vycm9yJyk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZS5zZXQobWVzc2FnZSk7XG4gICAgICB0aGlzLmVycm9yQ29kZS5zZXQoa2V5KTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRpbnVlKCk6IHZvaWQge1xuICAgIHRoaXMub25TdWNjZXNzLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzcykge1xuICAgICAgdm9pZCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucHJvcHMucmVkaXJlY3RPblN1Y2Nlc3MsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBvbkdvVG9Mb2dpbigpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dpblBhdGggPSB0aGlzLnByb3BzLmxvZ2luUGF0aCA/PyAnL2xvZ2luJztcbiAgICB2b2lkIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobG9naW5QYXRoLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gIH1cblxuICBhc3luYyBvblJlc2VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc2VuZGluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC5yZXNlbmRDb2RlKHsgZW1haWw6IHRoaXMucHJvcHMuZW1haWwsIHR5cGU6ICdFTUFJTF9WRVJJRlknIH0pKTtcbiAgICAgIHRoaXMucmVzZW5kU2VudC5zZXQodHJ1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgcmVzZW5kIGVycm9ycyBzaWxlbnRseSDigJQgdXNlciBjYW4gcmV0cnlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZXNlbmRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVFcnJvcihlcnI6IHVua25vd24pOiB7IG1lc3NhZ2U6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB7XG4gICAgaWYgKGVyciAmJiB0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgY29kZSA9IChlcnIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydjb2RlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qga2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICBJTlZBTElEX0NPREU6ICdpbnZhbGlkQ29kZScsXG4gICAgICAgIEFVVEhWMl9JTlZBTElEX0NPREU6ICdpbnZhbGlkQ29kZScsXG4gICAgICAgIEVYUElSRURfQ09ERTogJ2V4cGlyZWRDb2RlJyxcbiAgICAgICAgQ09ERV9FWFBJUkVEOiAnZXhwaXJlZENvZGUnLFxuICAgICAgICBBVVRIVjJfQ09ERV9FWFBJUkVEOiAnZXhwaXJlZENvZGUnLFxuICAgICAgICBBTFJFQURZX1ZFUklGSUVEOiAnYWxyZWFkeVZlcmlmaWVkJyxcbiAgICAgICAgQVVUSFYyX0FMUkVBRFlfVkVSSUZJRUQ6ICdhbHJlYWR5VmVyaWZpZWQnLFxuICAgICAgICBUT09fTUFOWV9BVFRFTVBUUzogJ3Rvb01hbnlBdHRlbXB0cycsXG4gICAgICAgIEFVVEhWMl9UT09fTUFOWV9BVFRFTVBUUzogJ3Rvb01hbnlBdHRlbXB0cycsXG4gICAgICAgIFJBVEVfTElNSVRFRDogJ3Rvb01hbnlBdHRlbXB0cycsXG4gICAgICB9O1xuICAgICAgaWYgKGNvZGUgJiYga2V5TWFwW2NvZGVdKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleU1hcFtjb2RlXTtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogdGhpcy50KGtleSksIGtleSB9O1xuICAgICAgfVxuICAgICAgY29uc3QgbXNnID0gKGVyciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ21lc3NhZ2UnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobXNnKSByZXR1cm4geyBtZXNzYWdlOiBtc2csIGtleTogJ3Vua25vd24nIH07XG4gICAgfVxuICAgIHJldHVybiB7IG1lc3NhZ2U6IHRoaXMudCgndW5rbm93bkVycm9yJyksIGtleTogJ3Vua25vd24nIH07XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ export const VERIFY_VIEW_I18N = {
2
+ es: {
3
+ verifying: 'Verificando...',
4
+ checkingCode: 'Estamos verificando tu código.',
5
+ successTitle: '¡Email verificado!',
6
+ successSubtitle: 'Tu cuenta está activa.',
7
+ continueBtn: 'Continuar',
8
+ errorTitle: 'Error al verificar',
9
+ resend: 'Reenviar código',
10
+ codeSent: 'Código reenviado — revisa tu email.',
11
+ invalidCode: 'El código no es válido.',
12
+ expiredCode: 'El código expiró. Solicita uno nuevo.',
13
+ alreadyVerified: 'Este email ya está verificado.',
14
+ tooManyAttempts: 'Demasiados intentos. Espera unos minutos.',
15
+ goToLogin: 'Ir al inicio de sesión',
16
+ unknownError: 'Ocurrió un error. Intenta de nuevo.',
17
+ },
18
+ en: {
19
+ verifying: 'Verifying...',
20
+ checkingCode: 'We are verifying your code.',
21
+ successTitle: 'Email verified!',
22
+ successSubtitle: 'Your account is now active.',
23
+ continueBtn: 'Continue',
24
+ errorTitle: 'Verification failed',
25
+ resend: 'Resend code',
26
+ codeSent: 'Code sent — check your email.',
27
+ invalidCode: 'The code is not valid.',
28
+ expiredCode: 'The code has expired. Request a new one.',
29
+ alreadyVerified: 'This email is already verified.',
30
+ tooManyAttempts: 'Too many attempts. Please wait a few minutes.',
31
+ goToLogin: 'Go to login',
32
+ unknownError: 'An error occurred. Please try again.',
33
+ },
34
+ };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXZpZXcuaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvdmVyaWZ5LXZpZXcvdmVyaWZ5LXZpZXcuaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsRUFBRSxFQUFFO1FBQ0YsU0FBUyxFQUFFLGdCQUFnQjtRQUMzQixZQUFZLEVBQUUsZ0NBQWdDO1FBQzlDLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsZUFBZSxFQUFFLHdCQUF3QjtRQUN6QyxXQUFXLEVBQUUsV0FBVztRQUN4QixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsUUFBUSxFQUFFLHFDQUFxQztRQUMvQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLFdBQVcsRUFBRSx1Q0FBdUM7UUFDcEQsZUFBZSxFQUFFLGdDQUFnQztRQUNqRCxlQUFlLEVBQUUsMkNBQTJDO1FBQzVELFNBQVMsRUFBRSx3QkFBd0I7UUFDbkMsWUFBWSxFQUFFLHFDQUFxQztLQUNwRDtJQUNELEVBQUUsRUFBRTtRQUNGLFNBQVMsRUFBRSxjQUFjO1FBQ3pCLFlBQVksRUFBRSw2QkFBNkI7UUFDM0MsWUFBWSxFQUFFLGlCQUFpQjtRQUMvQixlQUFlLEVBQUUsNkJBQTZCO1FBQzlDLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLFVBQVUsRUFBRSxxQkFBcUI7UUFDakMsTUFBTSxFQUFFLGFBQWE7UUFDckIsUUFBUSxFQUFFLCtCQUErQjtRQUN6QyxXQUFXLEVBQUUsd0JBQXdCO1FBQ3JDLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsZUFBZSxFQUFFLGlDQUFpQztRQUNsRCxlQUFlLEVBQUUsK0NBQStDO1FBQ2hFLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLFlBQVksRUFBRSxzQ0FBc0M7S0FDckQ7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGFuZ3VhZ2VzQ29udGVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgVkVSSUZZX1ZJRVdfSTE4TjogTGFuZ3VhZ2VzQ29udGVudCA9IHtcbiAgZXM6IHtcbiAgICB2ZXJpZnlpbmc6ICdWZXJpZmljYW5kby4uLicsXG4gICAgY2hlY2tpbmdDb2RlOiAnRXN0YW1vcyB2ZXJpZmljYW5kbyB0dSBjw7NkaWdvLicsXG4gICAgc3VjY2Vzc1RpdGxlOiAnwqFFbWFpbCB2ZXJpZmljYWRvIScsXG4gICAgc3VjY2Vzc1N1YnRpdGxlOiAnVHUgY3VlbnRhIGVzdMOhIGFjdGl2YS4nLFxuICAgIGNvbnRpbnVlQnRuOiAnQ29udGludWFyJyxcbiAgICBlcnJvclRpdGxlOiAnRXJyb3IgYWwgdmVyaWZpY2FyJyxcbiAgICByZXNlbmQ6ICdSZWVudmlhciBjw7NkaWdvJyxcbiAgICBjb2RlU2VudDogJ0PDs2RpZ28gcmVlbnZpYWRvIOKAlCByZXZpc2EgdHUgZW1haWwuJyxcbiAgICBpbnZhbGlkQ29kZTogJ0VsIGPDs2RpZ28gbm8gZXMgdsOhbGlkby4nLFxuICAgIGV4cGlyZWRDb2RlOiAnRWwgY8OzZGlnbyBleHBpcsOzLiBTb2xpY2l0YSB1bm8gbnVldm8uJyxcbiAgICBhbHJlYWR5VmVyaWZpZWQ6ICdFc3RlIGVtYWlsIHlhIGVzdMOhIHZlcmlmaWNhZG8uJyxcbiAgICB0b29NYW55QXR0ZW1wdHM6ICdEZW1hc2lhZG9zIGludGVudG9zLiBFc3BlcmEgdW5vcyBtaW51dG9zLicsXG4gICAgZ29Ub0xvZ2luOiAnSXIgYWwgaW5pY2lvIGRlIHNlc2nDs24nLFxuICAgIHVua25vd25FcnJvcjogJ09jdXJyacOzIHVuIGVycm9yLiBJbnRlbnRhIGRlIG51ZXZvLicsXG4gIH0sXG4gIGVuOiB7XG4gICAgdmVyaWZ5aW5nOiAnVmVyaWZ5aW5nLi4uJyxcbiAgICBjaGVja2luZ0NvZGU6ICdXZSBhcmUgdmVyaWZ5aW5nIHlvdXIgY29kZS4nLFxuICAgIHN1Y2Nlc3NUaXRsZTogJ0VtYWlsIHZlcmlmaWVkIScsXG4gICAgc3VjY2Vzc1N1YnRpdGxlOiAnWW91ciBhY2NvdW50IGlzIG5vdyBhY3RpdmUuJyxcbiAgICBjb250aW51ZUJ0bjogJ0NvbnRpbnVlJyxcbiAgICBlcnJvclRpdGxlOiAnVmVyaWZpY2F0aW9uIGZhaWxlZCcsXG4gICAgcmVzZW5kOiAnUmVzZW5kIGNvZGUnLFxuICAgIGNvZGVTZW50OiAnQ29kZSBzZW50IOKAlCBjaGVjayB5b3VyIGVtYWlsLicsXG4gICAgaW52YWxpZENvZGU6ICdUaGUgY29kZSBpcyBub3QgdmFsaWQuJyxcbiAgICBleHBpcmVkQ29kZTogJ1RoZSBjb2RlIGhhcyBleHBpcmVkLiBSZXF1ZXN0IGEgbmV3IG9uZS4nLFxuICAgIGFscmVhZHlWZXJpZmllZDogJ1RoaXMgZW1haWwgaXMgYWxyZWFkeSB2ZXJpZmllZC4nLFxuICAgIHRvb01hbnlBdHRlbXB0czogJ1RvbyBtYW55IGF0dGVtcHRzLiBQbGVhc2Ugd2FpdCBhIGZldyBtaW51dGVzLicsXG4gICAgZ29Ub0xvZ2luOiAnR28gdG8gbG9naW4nLFxuICAgIHVua25vd25FcnJvcjogJ0FuIGVycm9yIG9jY3VycmVkLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gIH0sXG59O1xuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.96';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45Nic7XG4iXX0=
5
+ export const VERSION = '4.0.98';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45OCc7XG4iXX0=