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.
- package/esm2022/lib/components/organisms/verify-view/types.mjs +2 -0
- package/esm2022/lib/components/organisms/verify-view/verify-view.component.mjs +210 -0
- package/esm2022/lib/components/organisms/verify-view/verify-view.i18n.mjs +35 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/valtech-components.mjs +236 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/verify-view/types.d.ts +8 -0
- package/lib/components/organisms/verify-view/verify-view.component.d.ts +28 -0
- package/lib/components/organisms/verify-view/verify-view.i18n.d.ts +2 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -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
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -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.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '4.0.98';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45OCc7XG4iXX0=
|