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.
- package/esm2022/lib/components/organisms/comment-thread/comment-thread.component.mjs +280 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +276 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/comment-thread/comment-thread.component.d.ts +52 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC10aHJlYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9jb21tZW50LXRocmVhZC9jb21tZW50LXRocmVhZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUF3WDFFLE1BQU0sT0FBTyx5QkFBeUI7SUFJcEMsSUFBYSxJQUFJLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQW9CRCxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTNCMUIsVUFBSyxHQUFHLGFBQWEsQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFPakIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUd0RCxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRVIsY0FBUyxHQUFHLE1BQU0sQ0FBWSxFQUFFLENBQUMsQ0FBQztRQUNsQyxlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLGNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQyxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBR3BFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDeEIsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLEtBQUksQ0FBQztJQUViLFlBQVksQ0FBQyxPQUFnQjtRQUMzQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDdEIsT0FBTyxJQUFJO2FBQ1IsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDUixXQUFXLEVBQUU7YUFDYixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBWTtRQUNwQixNQUFNLE1BQU0sR0FBMkI7WUFDckMsU0FBUyxFQUFFLFlBQVk7WUFDdkIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsS0FBSyxFQUFFLGVBQWU7U0FDdkIsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWlCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQztRQUUvQyxJQUFJLFFBQVEsR0FBRyxDQUFDO1lBQUUsT0FBTyxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLFFBQVEsR0FBRyxFQUFFO1lBQUUsT0FBTyxRQUFRLFFBQVEsR0FBRyxDQUFDO1FBQzlDLElBQUksU0FBUyxHQUFHLEVBQUU7WUFBRSxPQUFPLFFBQVEsU0FBUyxHQUFHLENBQUM7UUFDaEQsSUFBSSxRQUFRLEdBQUcsQ0FBQztZQUFFLE9BQU8sUUFBUSxRQUFRLEdBQUcsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBRTFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLCtCQUErQjtRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQWlCO1FBQy9CLElBQUksT0FBTyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzsrR0E3RlUseUJBQXlCO21HQUF6Qix5QkFBeUIsdVBBN1YxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEVULG1rSEEvRVMsWUFBWSwrUEFBRSxXQUFXLGtqQkFBRSxtQkFBbUIsa1VBb1Y1QztZQUNWLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ILE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RSxDQUFDO2FBQ0gsQ0FBQztTQUNIOzs0RkFFVSx5QkFBeUI7a0JBaldyQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFlBQy9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4RVQsY0FxUVc7d0JBQ1YsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25ILE9BQU8sQ0FBQyxTQUFTLEVBQUU7NEJBQ2pCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLENBQUM7Z0NBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDOzZCQUM3RSxDQUFDO3lCQUNILENBQUM7cUJBQ0g7Z0ZBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLO2dCQU1JLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50VGhyZWFkIHtcbiAgcmVxdWVzdElkOiBzdHJpbmc7XG4gIGNvbW1lbnRzOiBDb21tZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGNhbkNvbW1lbnQ/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=
|
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.943';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NDMnO1xuIl19
|