valtech-components 4.0.942 → 4.0.943

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,280 @@
1
+ import { Component, Input, Output, EventEmitter, signal, computed } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { trigger, transition, style, animate } from '@angular/animations';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "@angular/common";
8
+ export class ValCommentThreadComponent {
9
+ set data(value) {
10
+ this._comments.set(value.comments || []);
11
+ this._isLoading.set(value.isLoading ?? false);
12
+ this._currentUserId.set(value.currentUserId ?? '');
13
+ }
14
+ constructor(fb) {
15
+ this.fb = fb;
16
+ this.title = 'Comentarios';
17
+ this.canComment = true;
18
+ this.canDelete = false;
19
+ this.commentAdded = new EventEmitter();
20
+ this.commentDeleted = new EventEmitter();
21
+ this.maxChars = 1000;
22
+ this._comments = signal([]);
23
+ this._isLoading = signal(false);
24
+ this._isSubmitting = signal(false);
25
+ this._currentUserId = signal('');
26
+ this.comments = this._comments.asReadonly();
27
+ this.isLoading = this._isLoading.asReadonly();
28
+ this.isSubmitting = this._isSubmitting.asReadonly();
29
+ this.commentCount = computed(() => this._comments().length);
30
+ this.charCount = computed(() => this.form.get('body')?.value?.length ?? 0);
31
+ this.form = this.fb.group({
32
+ body: ['', [Validators.required, Validators.maxLength(this.maxChars)]],
33
+ });
34
+ }
35
+ ngOnInit() { }
36
+ isOwnComment(comment) {
37
+ return comment.author.userId === this._currentUserId();
38
+ }
39
+ getInitials(name) {
40
+ return name
41
+ .split(' ')
42
+ .map(w => w[0])
43
+ .join('')
44
+ .toUpperCase()
45
+ .slice(0, 2);
46
+ }
47
+ roleLabel(role) {
48
+ const labels = {
49
+ submitter: 'Postulante',
50
+ reviewer: 'Revisor',
51
+ admin: 'Administrador',
52
+ };
53
+ return labels[role] || role;
54
+ }
55
+ formatTime(isoString) {
56
+ const date = new Date(isoString);
57
+ const now = new Date();
58
+ const diffMs = now.getTime() - date.getTime();
59
+ const diffMins = Math.floor(diffMs / 60000);
60
+ const diffHours = Math.floor(diffMs / 3600000);
61
+ const diffDays = Math.floor(diffMs / 86400000);
62
+ if (diffMins < 1)
63
+ return 'hace unos segundos';
64
+ if (diffMins < 60)
65
+ return `hace ${diffMins}m`;
66
+ if (diffHours < 24)
67
+ return `hace ${diffHours}h`;
68
+ if (diffDays < 7)
69
+ return `hace ${diffDays}d`;
70
+ return date.toLocaleDateString('es-CL', { month: 'short', day: 'numeric' });
71
+ }
72
+ onSubmit() {
73
+ if (!this.form.valid)
74
+ return;
75
+ this._isSubmitting.set(true);
76
+ const body = this.form.get('body')?.value;
77
+ this.commentAdded.emit(body);
78
+ // Reset form after short delay
79
+ setTimeout(() => {
80
+ this.form.reset();
81
+ this._isSubmitting.set(false);
82
+ }, 300);
83
+ }
84
+ onDeleteComment(commentId) {
85
+ if (confirm('¿Eliminar este comentario?')) {
86
+ this.commentDeleted.emit(commentId);
87
+ }
88
+ }
89
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValCommentThreadComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ValCommentThreadComponent, isStandalone: true, selector: "val-comment-thread", inputs: { title: "title", canComment: "canComment", canDelete: "canDelete", data: "data" }, outputs: { commentAdded: "commentAdded", commentDeleted: "commentDeleted" }, ngImport: i0, template: `
91
+ <div class="comment-thread">
92
+ <!-- Header -->
93
+ <div class="comment-header">
94
+ <h3>{{ title }}</h3>
95
+ <span class="comment-count" *ngIf="commentCount() > 0">
96
+ {{ commentCount() }} {{ commentCount() === 1 ? 'comentario' : 'comentarios' }}
97
+ </span>
98
+ </div>
99
+
100
+ <!-- Comments list -->
101
+ <div class="comments-list" @fadeIn *ngIf="!isLoading()">
102
+ <div *ngIf="comments().length === 0" class="empty-state">
103
+ <p>Sin comentarios aún. Sé el primero en comentar.</p>
104
+ </div>
105
+
106
+ <div
107
+ *ngFor="let comment of comments(); let last = last"
108
+ class="comment-item"
109
+ [class.is-own]="isOwnComment(comment)"
110
+ @slideIn
111
+ >
112
+ <!-- Avatar + header -->
113
+ <div class="comment-header-row">
114
+ <div class="avatar">{{ getInitials(comment.author.name) }}</div>
115
+ <div class="meta">
116
+ <div class="author-line">
117
+ <span class="author-name">{{ comment.author.name }}</span>
118
+ <span *ngIf="comment.author.role" class="author-role"> ({{ roleLabel(comment.author.role) }}) </span>
119
+ </div>
120
+ <time class="timestamp">{{ formatTime(comment.createdAt) }}</time>
121
+ </div>
122
+ <button
123
+ *ngIf="isOwnComment(comment) && canDelete"
124
+ class="btn-delete"
125
+ (click)="onDeleteComment(comment.commentId)"
126
+ aria-label="Eliminar comentario"
127
+ >
128
+
129
+ </button>
130
+ </div>
131
+
132
+ <!-- Body -->
133
+ <div class="comment-body">{{ comment.body }}</div>
134
+
135
+ <!-- Divider (not on last) -->
136
+ <div *ngIf="!last" class="comment-divider"></div>
137
+ </div>
138
+ </div>
139
+
140
+ <!-- Loading -->
141
+ <div *ngIf="isLoading()" class="loading-state">
142
+ <div class="spinner"></div>
143
+ <p>Cargando comentarios...</p>
144
+ </div>
145
+
146
+ <!-- New comment form -->
147
+ <div *ngIf="canComment" class="comment-form" [formGroup]="form">
148
+ <textarea
149
+ formControlName="body"
150
+ placeholder="Escribe un comentario..."
151
+ class="textarea"
152
+ rows="3"
153
+ (keydown.ctrl.enter)="onSubmit()"
154
+ (keydown.meta.enter)="onSubmit()"
155
+ >
156
+ </textarea>
157
+ <div class="form-actions">
158
+ <span class="char-count" [class.near-limit]="charCount() > maxChars * 0.9">
159
+ {{ charCount() }} / {{ maxChars }}
160
+ </span>
161
+ <button type="button" class="btn-submit" [disabled]="!form.valid || isSubmitting()" (click)="onSubmit()">
162
+ {{ isSubmitting() ? 'Enviando...' : 'Comentar' }}
163
+ </button>
164
+ </div>
165
+ <div *ngIf="form.get('body')?.hasError('maxlength')" class="error-msg">Máximo {{ maxChars }} caracteres</div>
166
+ </div>
167
+ </div>
168
+ `, isInline: true, styles: [".comment-thread{display:flex;flex-direction:column;gap:1.5rem;padding:1.5rem;border-radius:.75rem;background:var(--color-bg-secondary, #f9f9f9);border:1px solid var(--color-border, #e0e0e0)}.comment-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;h3{margin:0;font-size:1rem;font-weight:700;color:var(--color-text-primary, #090f1b)}}.comment-count{font-size:.875rem;color:var(--color-text-muted, #6b7280);background:var(--color-bg-tertiary, #f3f3f3);padding:.25rem .75rem;border-radius:999px}.comments-list{display:flex;flex-direction:column;gap:0}.empty-state{text-align:center;padding:2rem 1rem;color:var(--color-text-muted, #6b7280);p{margin:0}}.comment-item{padding:1rem 0;display:flex;flex-direction:column;gap:.75rem;&.is-own{background:var(--color-bg-highlight, rgba(112, 38, 223, .05));padding:.75rem;border-radius:.5rem}}.comment-header-row{display:flex;align-items:flex-start;gap:.75rem}.avatar{width:2rem;height:2rem;border-radius:50%;background:var(--color-primary, #7026df);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;flex-shrink:0}.meta{flex:1}.author-line{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.author-name{font-weight:600;color:var(--color-text-primary, #090f1b);font-size:.95rem}.author-role{font-size:.8rem;color:var(--color-text-muted, #6b7280);background:var(--color-bg-tertiary, #f3f3f3);padding:.125rem .5rem;border-radius:.25rem}.timestamp{display:block;font-size:.8rem;color:var(--color-text-muted, #6b7280);margin-top:.25rem}.btn-delete{background:transparent;border:none;color:var(--color-text-muted, #6b7280);cursor:pointer;font-size:1.25rem;padding:.25rem .5rem;transition:color .2s;&:hover{color:var(--color-error, #ef4444)}}.comment-body{color:var(--color-text-primary, #090f1b);line-height:1.6;word-wrap:break-word;white-space:pre-wrap;font-size:.95rem;padding-left:2.75rem}.comment-divider{height:1px;background:var(--color-border, #e0e0e0);margin:.75rem 0}.loading-state{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem 1rem;color:var(--color-text-muted, #6b7280);p{margin:0}}.spinner{width:1.5rem;height:1.5rem;border:2px solid var(--color-border, #e0e0e0);border-top-color:var(--color-primary, #7026df);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.comment-form{display:flex;flex-direction:column;gap:.75rem;padding:1rem;background:#fff;border:1px solid var(--color-border, #e0e0e0);border-radius:.5rem}.textarea{width:100%;padding:.75rem;border:1px solid var(--color-border, #e0e0e0);border-radius:.5rem;font-family:inherit;font-size:.95rem;resize:vertical;min-height:3rem;&:focus{outline:none;border-color:var(--color-primary, #7026df);box-shadow:0 0 0 3px var(--color-primary-light, rgba(112, 38, 223, .1))}}.form-actions{display:flex;align-items:center;justify-content:space-between;gap:1rem}.char-count{font-size:.8rem;color:var(--color-text-muted, #6b7280);&.near-limit{color:var(--color-warning, #f59e0b)}}.btn-submit{background:var(--color-primary, #7026df);color:#fff;border:none;padding:.5rem 1.5rem;border-radius:.5rem;font-weight:600;cursor:pointer;transition:background .2s,opacity .2s;&:hover:not(:disabled){background:var(--color-primary-dark, #5a1fb5)}&:disabled{opacity:.5;cursor:not-allowed}}.error-msg{font-size:.8rem;color:var(--color-error, #ef4444);margin-top:.25rem}@media (max-width: 640px){.comment-thread{padding:1rem}.comment-body{padding-left:0;margin-top:.5rem}.form-actions{flex-direction:column-reverse}.btn-submit{width:100%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], animations: [
169
+ trigger('fadeIn', [transition(':enter', [style({ opacity: 0 }), animate('200ms ease-in', style({ opacity: 1 }))])]),
170
+ trigger('slideIn', [
171
+ transition(':enter', [
172
+ style({ opacity: 0, transform: 'translateY(-0.5rem)' }),
173
+ animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),
174
+ ]),
175
+ ]),
176
+ ] }); }
177
+ }
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValCommentThreadComponent, decorators: [{
179
+ type: Component,
180
+ args: [{ selector: 'val-comment-thread', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule], template: `
181
+ <div class="comment-thread">
182
+ <!-- Header -->
183
+ <div class="comment-header">
184
+ <h3>{{ title }}</h3>
185
+ <span class="comment-count" *ngIf="commentCount() > 0">
186
+ {{ commentCount() }} {{ commentCount() === 1 ? 'comentario' : 'comentarios' }}
187
+ </span>
188
+ </div>
189
+
190
+ <!-- Comments list -->
191
+ <div class="comments-list" @fadeIn *ngIf="!isLoading()">
192
+ <div *ngIf="comments().length === 0" class="empty-state">
193
+ <p>Sin comentarios aún. Sé el primero en comentar.</p>
194
+ </div>
195
+
196
+ <div
197
+ *ngFor="let comment of comments(); let last = last"
198
+ class="comment-item"
199
+ [class.is-own]="isOwnComment(comment)"
200
+ @slideIn
201
+ >
202
+ <!-- Avatar + header -->
203
+ <div class="comment-header-row">
204
+ <div class="avatar">{{ getInitials(comment.author.name) }}</div>
205
+ <div class="meta">
206
+ <div class="author-line">
207
+ <span class="author-name">{{ comment.author.name }}</span>
208
+ <span *ngIf="comment.author.role" class="author-role"> ({{ roleLabel(comment.author.role) }}) </span>
209
+ </div>
210
+ <time class="timestamp">{{ formatTime(comment.createdAt) }}</time>
211
+ </div>
212
+ <button
213
+ *ngIf="isOwnComment(comment) && canDelete"
214
+ class="btn-delete"
215
+ (click)="onDeleteComment(comment.commentId)"
216
+ aria-label="Eliminar comentario"
217
+ >
218
+
219
+ </button>
220
+ </div>
221
+
222
+ <!-- Body -->
223
+ <div class="comment-body">{{ comment.body }}</div>
224
+
225
+ <!-- Divider (not on last) -->
226
+ <div *ngIf="!last" class="comment-divider"></div>
227
+ </div>
228
+ </div>
229
+
230
+ <!-- Loading -->
231
+ <div *ngIf="isLoading()" class="loading-state">
232
+ <div class="spinner"></div>
233
+ <p>Cargando comentarios...</p>
234
+ </div>
235
+
236
+ <!-- New comment form -->
237
+ <div *ngIf="canComment" class="comment-form" [formGroup]="form">
238
+ <textarea
239
+ formControlName="body"
240
+ placeholder="Escribe un comentario..."
241
+ class="textarea"
242
+ rows="3"
243
+ (keydown.ctrl.enter)="onSubmit()"
244
+ (keydown.meta.enter)="onSubmit()"
245
+ >
246
+ </textarea>
247
+ <div class="form-actions">
248
+ <span class="char-count" [class.near-limit]="charCount() > maxChars * 0.9">
249
+ {{ charCount() }} / {{ maxChars }}
250
+ </span>
251
+ <button type="button" class="btn-submit" [disabled]="!form.valid || isSubmitting()" (click)="onSubmit()">
252
+ {{ isSubmitting() ? 'Enviando...' : 'Comentar' }}
253
+ </button>
254
+ </div>
255
+ <div *ngIf="form.get('body')?.hasError('maxlength')" class="error-msg">Máximo {{ maxChars }} caracteres</div>
256
+ </div>
257
+ </div>
258
+ `, animations: [
259
+ trigger('fadeIn', [transition(':enter', [style({ opacity: 0 }), animate('200ms ease-in', style({ opacity: 1 }))])]),
260
+ trigger('slideIn', [
261
+ transition(':enter', [
262
+ style({ opacity: 0, transform: 'translateY(-0.5rem)' }),
263
+ animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),
264
+ ]),
265
+ ]),
266
+ ], styles: [".comment-thread{display:flex;flex-direction:column;gap:1.5rem;padding:1.5rem;border-radius:.75rem;background:var(--color-bg-secondary, #f9f9f9);border:1px solid var(--color-border, #e0e0e0)}.comment-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;h3{margin:0;font-size:1rem;font-weight:700;color:var(--color-text-primary, #090f1b)}}.comment-count{font-size:.875rem;color:var(--color-text-muted, #6b7280);background:var(--color-bg-tertiary, #f3f3f3);padding:.25rem .75rem;border-radius:999px}.comments-list{display:flex;flex-direction:column;gap:0}.empty-state{text-align:center;padding:2rem 1rem;color:var(--color-text-muted, #6b7280);p{margin:0}}.comment-item{padding:1rem 0;display:flex;flex-direction:column;gap:.75rem;&.is-own{background:var(--color-bg-highlight, rgba(112, 38, 223, .05));padding:.75rem;border-radius:.5rem}}.comment-header-row{display:flex;align-items:flex-start;gap:.75rem}.avatar{width:2rem;height:2rem;border-radius:50%;background:var(--color-primary, #7026df);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;flex-shrink:0}.meta{flex:1}.author-line{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.author-name{font-weight:600;color:var(--color-text-primary, #090f1b);font-size:.95rem}.author-role{font-size:.8rem;color:var(--color-text-muted, #6b7280);background:var(--color-bg-tertiary, #f3f3f3);padding:.125rem .5rem;border-radius:.25rem}.timestamp{display:block;font-size:.8rem;color:var(--color-text-muted, #6b7280);margin-top:.25rem}.btn-delete{background:transparent;border:none;color:var(--color-text-muted, #6b7280);cursor:pointer;font-size:1.25rem;padding:.25rem .5rem;transition:color .2s;&:hover{color:var(--color-error, #ef4444)}}.comment-body{color:var(--color-text-primary, #090f1b);line-height:1.6;word-wrap:break-word;white-space:pre-wrap;font-size:.95rem;padding-left:2.75rem}.comment-divider{height:1px;background:var(--color-border, #e0e0e0);margin:.75rem 0}.loading-state{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:2rem 1rem;color:var(--color-text-muted, #6b7280);p{margin:0}}.spinner{width:1.5rem;height:1.5rem;border:2px solid var(--color-border, #e0e0e0);border-top-color:var(--color-primary, #7026df);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.comment-form{display:flex;flex-direction:column;gap:.75rem;padding:1rem;background:#fff;border:1px solid var(--color-border, #e0e0e0);border-radius:.5rem}.textarea{width:100%;padding:.75rem;border:1px solid var(--color-border, #e0e0e0);border-radius:.5rem;font-family:inherit;font-size:.95rem;resize:vertical;min-height:3rem;&:focus{outline:none;border-color:var(--color-primary, #7026df);box-shadow:0 0 0 3px var(--color-primary-light, rgba(112, 38, 223, .1))}}.form-actions{display:flex;align-items:center;justify-content:space-between;gap:1rem}.char-count{font-size:.8rem;color:var(--color-text-muted, #6b7280);&.near-limit{color:var(--color-warning, #f59e0b)}}.btn-submit{background:var(--color-primary, #7026df);color:#fff;border:none;padding:.5rem 1.5rem;border-radius:.5rem;font-weight:600;cursor:pointer;transition:background .2s,opacity .2s;&:hover:not(:disabled){background:var(--color-primary-dark, #5a1fb5)}&:disabled{opacity:.5;cursor:not-allowed}}.error-msg{font-size:.8rem;color:var(--color-error, #ef4444);margin-top:.25rem}@media (max-width: 640px){.comment-thread{padding:1rem}.comment-body{padding-left:0;margin-top:.5rem}.form-actions{flex-direction:column-reverse}.btn-submit{width:100%}}\n"] }]
267
+ }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { title: [{
268
+ type: Input
269
+ }], canComment: [{
270
+ type: Input
271
+ }], canDelete: [{
272
+ type: Input
273
+ }], data: [{
274
+ type: Input
275
+ }], commentAdded: [{
276
+ type: Output
277
+ }], commentDeleted: [{
278
+ type: Output
279
+ }] } });
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC10aHJlYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9jb21tZW50LXRocmVhZC9jb21tZW50LXRocmVhZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUF3WDFFLE1BQU0sT0FBTyx5QkFBeUI7SUFJcEMsSUFBYSxJQUFJLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQW9CRCxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTNCMUIsVUFBSyxHQUFHLGFBQWEsQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFPakIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxD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QUFFLHFCQUFxQixFQUFFLENBQUM7Z0NBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDOzZCQUM3RSxDQUFDO3lCQUNILENBQUM7cUJBQ0g7Z0ZBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLO2dCQU1JLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50VGhyZWFkIHtcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGNvbW1lbnRzOiBDb21tZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGNhbkNvbW1lbnQ/OiBib29sZWFuO1xuICBjdXJyZW50VXNlcklkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1lbnQge1xuICBjb21tZW50SWQ6IHN0cmluZztcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGF1dGhvcjoge1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBvcmdJZD86IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcm9sZT86IHN0cmluZzsgLy8gJ3N1Ym1pdHRlcicgfCAncmV2aWV3ZXInIHwgJ2FkbWluJ1xuICB9O1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY29tbWVudC10aHJlYWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGhyZWFkXCI+XG4gICAgICA8IS0tIEhlYWRlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LWhlYWRlclwiPlxuICAgICAgICA8aDM+e3sgdGl0bGUgfX08L2gzPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1lbnQtY291bnRcIiAqbmdJZj1cImNvbW1lbnRDb3VudCgpID4gMFwiPlxuICAgICAgICAgIHt7IGNvbW1lbnRDb3VudCgpIH19IHt7IGNvbW1lbnRDb3VudCgpID09PSAxID8gJ2NvbWVudGFyaW8nIDogJ2NvbWVudGFyaW9zJyB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb21tZW50cyBsaXN0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnRzLWxpc3RcIiBAZmFkZUluICpuZ0lmPVwiIWlzTG9hZGluZygpXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb21tZW50cygpLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cbiAgICAgICAgICA8cD5TaW4gY29tZW50YXJpb3MgYcO6bi4gU8OpIGVsIHByaW1lcm8gZW4gY29tZW50YXIuPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbW1lbnQgb2YgY29tbWVudHMoKTsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICBjbGFzcz1cImNvbW1lbnQtaXRlbVwiXG4gICAgICAgICAgW2NsYXNzLmlzLW93bl09XCJpc093bkNvbW1lbnQoY29tbWVudClcIlxuICAgICAgICAgIEBzbGlkZUluXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEF2YXRhciArIGhlYWRlciAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCI+e3sgZ2V0SW5pdGlhbHMoY29tbWVudC5hdXRob3IubmFtZSkgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRhXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3ItbGluZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXV0aG9yLW5hbWVcIj57eyBjb21tZW50LmF1dGhvci5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29tbWVudC5hdXRob3Iucm9sZVwiIGNsYXNzPVwiYXV0aG9yLXJvbGVcIj4gKHt7IHJvbGVMYWJlbChjb21tZW50LmF1dGhvci5yb2xlKSB9fSkgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHRpbWUgY2xhc3M9XCJ0aW1lc3RhbXBcIj57eyBmb3JtYXRUaW1lKGNvbW1lbnQuY3JlYXRlZEF0KSB9fTwvdGltZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImlzT3duQ29tbWVudChjb21tZW50KSAmJiBjYW5EZWxldGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kZWxldGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGVDb21tZW50KGNvbW1lbnQuY29tbWVudElkKVwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFbGltaW5hciBjb21lbnRhcmlvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gQm9keSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1ib2R5XCI+e3sgY29tbWVudC5ib2R5IH19PC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERpdmlkZXIgKG5vdCBvbiBsYXN0KSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxhc3RcIiBjbGFzcz1cImNvbW1lbnQtZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExvYWRpbmcgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nKClcIiBjbGFzcz1cImxvYWRpbmctc3RhdGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPHA+Q2FyZ2FuZG8gY29tZW50YXJpb3MuLi48L3A+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBOZXcgY29tbWVudCBmb3JtIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImNhbkNvbW1lbnRcIiBjbGFzcz1cImNvbW1lbnQtZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJib2R5XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVzY3JpYmUgdW4gY29tZW50YXJpby4uLlwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICAgcm93cz1cIjNcIlxuICAgICAgICAgIChrZXlkb3duLmN0cmwuZW50ZXIpPVwib25TdWJtaXQoKVwiXG4gICAgICAgICAgKGtleWRvd24ubWV0YS5lbnRlcik9XCJvblN1Ym1pdCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1hY3Rpb25zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGFyLWNvdW50XCIgW2NsYXNzLm5lYXItbGltaXRdPVwiY2hhckNvdW50KCkgPiBtYXhDaGFycyAqIDAuOVwiPlxuICAgICAgICAgICAge3sgY2hhckNvdW50KCkgfX0gLyB7eyBtYXhDaGFycyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1zdWJtaXRcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgaXNTdWJtaXR0aW5nKClcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPlxuICAgICAgICAgICAge3sgaXNTdWJtaXR0aW5nKCkgPyAnRW52aWFuZG8uLi4nIDogJ0NvbWVudGFyJyB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImZvcm0uZ2V0KCdib2R5Jyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiIGNsYXNzPVwiZXJyb3ItbXNnXCI+TcOheGltbyB7eyBtYXhDaGFycyB9fSBjYXJhY3RlcmVzPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmNvbW1lbnQtdGhyZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxLjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDEuNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctc2Vjb25kYXJ5LCAjZjlmOWY5KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItYm9yZGVyLCAjZTBlMGUwKTtcbiAgICAgIH1cblxuICAgICAgLmNvbW1lbnQtaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICAgIGgzIHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgIzA5MGYxYik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNvbW1lbnQtY291bnQge1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNzI4MCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLXRlcnRpYXJ5LCAjZjNmM2YzKTtcbiAgICAgICAgcGFkZGluZzogMC4yNXJlbSAwLjc1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgIH1cblxuICAgICAgLmNvbW1lbnRzLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDA7XG4gICAgICB9XG5cbiAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMnJlbSAxcmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNzI4MCk7XG4gICAgICAgIHAge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29tbWVudC1pdGVtIHtcbiAgICAgICAgcGFkZGluZzogMXJlbSAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG5cbiAgICAgICAgJi5pcy1vd24ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnLWhpZ2hsaWdodCwgcmdiYSgxMTIsIDM4LCAyMjMsIDAuMDUpKTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29tbWVudC1oZWFkZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmF2YXRhciB7XG4gICAgICAgIHdpZHRoOiAycmVtO1xuICAgICAgICBoZWlnaHQ6IDJyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeSwgIzcwMjZkZik7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgIC5tZXRhIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgIH1cblxuICAgICAgLmF1dGhvci1saW5lIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmF1dGhvci1uYW1lIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgIzA5MGYxYik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmF1dGhvci1yb2xlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkLCAjNmI3MjgwKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmctdGVydGlhcnksICNmM2YzZjMpO1xuICAgICAgICBwYWRkaW5nOiAwLjEyNXJlbSAwLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC50aW1lc3RhbXAge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkLCAjNmI3MjgwKTtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmJ0bi1kZWxldGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNzI4MCk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItZXJyb3IsICNlZjQ0NDQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jb21tZW50LWJvZHkge1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1wcmltYXJ5LCAjMDkwZjFiKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAyLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY29tbWVudC1kaXZpZGVyIHtcbiAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJvcmRlciwgI2UwZTBlMCk7XG4gICAgICAgIG1hcmdpbjogMC43NXJlbSAwO1xuICAgICAgfVxuXG4gICAgICAubG9hZGluZy1zdGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgcGFkZGluZzogMnJlbSAxcmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNzI4MCk7XG4gICAgICAgIHAge1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuc3Bpbm5lciB7XG4gICAgICAgIHdpZHRoOiAxLjVyZW07XG4gICAgICAgIGhlaWdodDogMS41cmVtO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIsICNlMGUwZTApO1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7XG4gICAgICAgIHRvIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jb21tZW50LWZvcm0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIsICNlMGUwZTApO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC50ZXh0YXJlYSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ib3JkZXIsICNlMGUwZTApO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgICAgIHJlc2l6ZTogdmVydGljYWw7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDNyZW07XG5cbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1jb2xvci1wcmltYXJ5LWxpZ2h0LCByZ2JhKDExMiwgMzgsIDIyMywgMC4xKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmZvcm0tYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hhci1jb3VudCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCwgIzZiNzI4MCk7XG5cbiAgICAgICAgJi5uZWFyLWxpbWl0IHtcbiAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3Itd2FybmluZywgI2Y1OWUwYik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmJ0bi1zdWJtaXQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDAuNXJlbSAxLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJhY2tncm91bmQgMC4ycyxcbiAgICAgICAgICBvcGFjaXR5IDAuMnM7XG5cbiAgICAgICAgJjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcHJpbWFyeS1kYXJrLCAjNWExZmI1KTtcbiAgICAgICAgfVxuXG4gICAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5lcnJvci1tc2cge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWVycm9yLCAjZWY0NDQ0KTtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4yNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7XG4gICAgICAgIC5jb21tZW50LXRocmVhZCB7XG4gICAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb21tZW50LWJvZHkge1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybS1hY3Rpb25zIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgICAgIH1cblxuICAgICAgICAuYnRuLXN1Ym1pdCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZUluJywgW3RyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7IG9wYWNpdHk6IDAgfSksIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4nLCBzdHlsZSh7IG9wYWNpdHk6IDEgfSkpXSldKSxcbiAgICB0cmlnZ2VyKCdzbGlkZUluJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTAuNXJlbSknIH0pLFxuICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSkpLFxuICAgICAgXSksXG4gICAgXSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbENvbW1lbnRUaHJlYWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0aXRsZSA9ICdDb21lbnRhcmlvcyc7XG4gIEBJbnB1dCgpIGNhbkNvbW1lbnQgPSB0cnVlO1xuICBASW5wdXQoKSBjYW5EZWxldGUgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWU6IENvbW1lbnRUaHJlYWQpIHtcbiAgICB0aGlzLl9jb21tZW50cy5zZXQodmFsdWUuY29tbWVudHMgfHwgW10pO1xuICAgIHRoaXMuX2lzTG9hZGluZy5zZXQodmFsdWUuaXNMb2FkaW5nID8/IGZhbHNlKTtcbiAgICB0aGlzLl9jdXJyZW50VXNlcklkLnNldCh2YWx1ZS5jdXJyZW50VXNlcklkID8/ICcnKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBjb21tZW50QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNvbW1lbnREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICBtYXhDaGFycyA9IDEwMDA7XG5cbiAgcHJpdmF0ZSBfY29tbWVudHMgPSBzaWduYWw8Q29tbWVudFtdPihbXSk7XG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX2lzU3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgX2N1cnJlbnRVc2VySWQgPSBzaWduYWwoJycpO1xuXG4gIGNvbW1lbnRzID0gdGhpcy5fY29tbWVudHMuYXNSZWFkb25seSgpO1xuICBpc0xvYWRpbmcgPSB0aGlzLl9pc0xvYWRpbmcuYXNSZWFkb25seSgpO1xuICBpc1N1Ym1pdHRpbmcgPSB0aGlzLl9pc1N1Ym1pdHRpbmcuYXNSZWFkb25seSgpO1xuXG4gIGNvbW1lbnRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX2NvbW1lbnRzKCkubGVuZ3RoKTtcbiAgY2hhckNvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mb3JtLmdldCgnYm9keScpPy52YWx1ZT8ubGVuZ3RoID8/IDApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBib2R5OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heENoYXJzKV1dLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7fVxuXG4gIGlzT3duQ29tbWVudChjb21tZW50OiBDb21tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbW1lbnQuYXV0aG9yLnVzZXJJZCA9PT0gdGhpcy5fY3VycmVudFVzZXJJZCgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAodyA9PiB3WzBdKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgLnNsaWNlKDAsIDIpO1xuICB9XG5cbiAgcm9sZUxhYmVsKHJvbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgc3VibWl0dGVyOiAnUG9zdHVsYW50ZScsXG4gICAgICByZXZpZXdlcjogJ1Jldmlzb3InLFxuICAgICAgYWRtaW46ICdBZG1pbmlzdHJhZG9yJyxcbiAgICB9O1xuICAgIHJldHVybiBsYWJlbHNbcm9sZV0gfHwgcm9sZTtcbiAgfVxuXG4gIGZvcm1hdFRpbWUoaXNvU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGlmZk1zID0gbm93LmdldFRpbWUoKSAtIGRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpZmZNaW5zID0gTWF0aC5mbG9vcihkaWZmTXMgLyA2MDAwMCk7XG4gICAgY29uc3QgZGlmZkhvdXJzID0gTWF0aC5mbG9vcihkaWZmTXMgLyAzNjAwMDAwKTtcbiAgICBjb25zdCBkaWZmRGF5cyA9IE1hdGguZmxvb3IoZGlmZk1zIC8gODY0MDAwMDApO1xuXG4gICAgaWYgKGRpZmZNaW5zIDwgMSkgcmV0dXJuICdoYWNlIHVub3Mgc2VndW5kb3MnO1xuICAgIGlmIChkaWZmTWlucyA8IDYwKSByZXR1cm4gYGhhY2UgJHtkaWZmTWluc31tYDtcbiAgICBpZiAoZGlmZkhvdXJzIDwgMjQpIHJldHVybiBgaGFjZSAke2RpZmZIb3Vyc31oYDtcbiAgICBpZiAoZGlmZkRheXMgPCA3KSByZXR1cm4gYGhhY2UgJHtkaWZmRGF5c31kYDtcblxuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygnZXMtQ0wnLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KTtcbiAgfVxuXG4gIG9uU3VibWl0KCkge1xuICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSByZXR1cm47XG5cbiAgICB0aGlzLl9pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmZvcm0uZ2V0KCdib2R5Jyk/LnZhbHVlO1xuXG4gICAgdGhpcy5jb21tZW50QWRkZWQuZW1pdChib2R5KTtcblxuICAgIC8vIFJlc2V0IGZvcm0gYWZ0ZXIgc2hvcnQgZGVsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgdGhpcy5faXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZykge1xuICAgIGlmIChjb25maXJtKCfCv0VsaW1pbmFyIGVzdGUgY29tZW50YXJpbz8nKSkge1xuICAgICAgdGhpcy5jb21tZW50RGVsZXRlZC5lbWl0KGNvbW1lbnRJZCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -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.942';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NDInO1xuIl19
5
+ export const VERSION = '4.0.943';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NDMnO1xuIl19