ng-zenduit 2.0.3 → 2.0.8
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/esm2020/lib/comment-item/zendu-comment-item.component.mjs +95 -0
- package/esm2020/lib/comment-list/zendu-comment-list.component.mjs +52 -0
- package/esm2020/lib/comment-textarea/zendu-comment-textarea.component.mjs +182 -0
- package/esm2020/lib/date-picker-dropdown/date-picker-dropdown.types.mjs +2 -0
- package/esm2020/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.mjs +470 -0
- package/esm2020/lib/file-uploader/file-uploader.types.mjs +2 -0
- package/esm2020/lib/file-uploader/zendu-file-uploader.component.mjs +144 -0
- package/esm2020/lib/ng-zenduit.module.mjs +30 -5
- package/esm2020/lib/timepicker/zendu-timepicker.component.mjs +2 -2
- package/esm2020/public-api.mjs +8 -1
- package/fesm2015/ng-zenduit.mjs +954 -7
- package/fesm2015/ng-zenduit.mjs.map +1 -1
- package/fesm2020/ng-zenduit.mjs +947 -7
- package/fesm2020/ng-zenduit.mjs.map +1 -1
- package/icons/arrow-right.svg +3 -0
- package/icons/check-circle.svg +3 -0
- package/icons/film.svg +3 -0
- package/icons/upload-cloud.svg +3 -0
- package/lib/comment-item/zendu-comment-item.component.d.ts +49 -0
- package/lib/comment-list/zendu-comment-list.component.d.ts +22 -0
- package/lib/comment-textarea/zendu-comment-textarea.component.d.ts +57 -0
- package/lib/date-picker-dropdown/date-picker-dropdown.types.d.ts +12 -0
- package/lib/date-picker-dropdown/zendu-date-picker-dropdown.component.d.ts +87 -0
- package/lib/file-uploader/file-uploader.types.d.ts +7 -0
- package/lib/file-uploader/zendu-file-uploader.component.d.ts +27 -0
- package/lib/ng-zenduit.module.d.ts +13 -8
- package/package.json +1 -1
- package/public-api.d.ts +7 -0
- package/styles/colors.scss +450 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../comment-textarea/zendu-comment-textarea.component";
|
|
5
|
+
export class ZenduCommentItemComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.showConnector = true;
|
|
8
|
+
this.editable = true;
|
|
9
|
+
this.deletable = true;
|
|
10
|
+
this.loading = false;
|
|
11
|
+
this.edit = new EventEmitter();
|
|
12
|
+
this.delete = new EventEmitter();
|
|
13
|
+
this.saveEdit = new EventEmitter();
|
|
14
|
+
this.cancelEdit = new EventEmitter();
|
|
15
|
+
this.editing = false;
|
|
16
|
+
this.editValue = '';
|
|
17
|
+
this.wasLoading = false;
|
|
18
|
+
}
|
|
19
|
+
ngOnChanges(changes) {
|
|
20
|
+
if (changes['loading'] && this.wasLoading && !this.loading && this.editing) {
|
|
21
|
+
this.editing = false;
|
|
22
|
+
this.editValue = '';
|
|
23
|
+
}
|
|
24
|
+
this.wasLoading = this.loading;
|
|
25
|
+
}
|
|
26
|
+
get isEditable() {
|
|
27
|
+
return this.editable && (this.comment?.editable !== false);
|
|
28
|
+
}
|
|
29
|
+
get isDeletable() {
|
|
30
|
+
return this.deletable && (this.comment?.deletable !== false);
|
|
31
|
+
}
|
|
32
|
+
get initials() {
|
|
33
|
+
if (!this.comment?.authorName)
|
|
34
|
+
return '';
|
|
35
|
+
return this.comment.authorName
|
|
36
|
+
.split(' ')
|
|
37
|
+
.map(n => n[0])
|
|
38
|
+
.join('')
|
|
39
|
+
.substring(0, 2)
|
|
40
|
+
.toUpperCase();
|
|
41
|
+
}
|
|
42
|
+
onEdit() {
|
|
43
|
+
if (this.loading)
|
|
44
|
+
return;
|
|
45
|
+
this.editing = true;
|
|
46
|
+
this.editValue = this.comment.text;
|
|
47
|
+
this.edit.emit(this.comment);
|
|
48
|
+
}
|
|
49
|
+
onDelete() {
|
|
50
|
+
if (this.loading)
|
|
51
|
+
return;
|
|
52
|
+
this.delete.emit(this.comment);
|
|
53
|
+
}
|
|
54
|
+
onSaveEdit(event) {
|
|
55
|
+
this.saveEdit.emit({ comment: this.comment, text: event.text });
|
|
56
|
+
}
|
|
57
|
+
onCancelEdit() {
|
|
58
|
+
this.editing = false;
|
|
59
|
+
this.editValue = '';
|
|
60
|
+
this.cancelEdit.emit(this.comment);
|
|
61
|
+
}
|
|
62
|
+
getFileIcon(name) {
|
|
63
|
+
const ext = name.split('.').pop()?.toLowerCase() || '';
|
|
64
|
+
if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext))
|
|
65
|
+
return 'document';
|
|
66
|
+
if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext))
|
|
67
|
+
return 'video';
|
|
68
|
+
return 'misc';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
ZenduCommentItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
ZenduCommentItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduCommentItemComponent, selector: "zen-comment-item", inputs: { comment: "comment", showConnector: "showConnector", editable: "editable", deletable: "deletable", loading: "loading" }, outputs: { edit: "edit", delete: "delete", saveEdit: "saveEdit", cancelEdit: "cancelEdit" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"zen-comment-item\" [class.zen-comment-item--loading]=\"loading\">\n\n <div class=\"zen-comment-item__left\">\n <!-- Avatar -->\n <div class=\"zen-comment-item__avatar\">\n <img *ngIf=\"comment.authorAvatar\"\n [src]=\"comment.authorAvatar\"\n [alt]=\"comment.authorName\"\n class=\"zen-comment-item__avatar-img\" />\n <span *ngIf=\"!comment.authorAvatar\" class=\"zen-comment-item__avatar-initials\">\n {{ initials }}\n </span>\n <span *ngIf=\"comment.online\" class=\"zen-comment-item__online-dot\"></span>\n </div>\n <!-- Connector line -->\n <div *ngIf=\"showConnector\" class=\"zen-comment-item__connector\"></div>\n </div>\n\n <div class=\"zen-comment-item__body\">\n <!-- Header: name + time -->\n <div class=\"zen-comment-item__header\">\n <span class=\"zen-comment-item__author\">{{ comment.authorName }}</span>\n <span class=\"zen-comment-item__time\">{{ comment.timestamp }}</span>\n </div>\n\n <!-- Default view -->\n <ng-container *ngIf=\"!editing\">\n <p class=\"zen-comment-item__text\">{{ comment.text }}</p>\n\n <!-- Attachments -->\n <div class=\"zen-comment-item__attachment\"\n *ngFor=\"let att of comment.attachments\">\n <div class=\"zen-comment-item__attachment-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-comment-item__attachment-info\">\n <div class=\"zen-comment-item__attachment-name\">{{ att.name }}</div>\n <div class=\"zen-comment-item__attachment-size\">{{ att.size }}</div>\n </div>\n </div>\n </ng-container>\n\n <!-- Edit view -->\n <ng-container *ngIf=\"editing\">\n <zen-comment-textarea\n [(value)]=\"editValue\"\n [loading]=\"loading\"\n (save)=\"onSaveEdit($event)\"\n (cancel)=\"onCancelEdit()\">\n </zen-comment-textarea>\n </ng-container>\n </div>\n\n <!-- Actions (always visible, individually controllable) -->\n <div class=\"zen-comment-item__actions\" *ngIf=\"(isEditable || isDeletable) && !editing\">\n <button *ngIf=\"isDeletable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Delete\"\n [disabled]=\"loading\"\n (click)=\"onDelete()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button *ngIf=\"isEditable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Edit\"\n [disabled]=\"loading\"\n (click)=\"onEdit()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L7.5 20.5L2 22L3.5 16.5L17 3Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n", styles: [".zen-comment-item{display:flex;align-items:flex-start;width:100%}.zen-comment-item--loading{opacity:.7;pointer-events:none}.zen-comment-item__left{display:flex;flex-direction:column;align-items:center;gap:4px;padding-bottom:4px;flex-shrink:0}.zen-comment-item__avatar{position:relative;width:32px;height:32px;border-radius:200px;background:#C7B9DA;overflow:visible;flex-shrink:0}.zen-comment-item__avatar-img{width:32px;height:32px;border-radius:200px;object-fit:cover}.zen-comment-item__avatar-initials{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:200px;font-family:Inter,sans-serif;font-weight:500;font-size:12px;color:#fff}.zen-comment-item__online-dot{position:absolute;bottom:0;right:0;width:8px;height:8px;background:#12B76A;border:1.5px solid #fff;border-radius:4px}.zen-comment-item__connector{flex:1;width:2px;min-height:8px;background:#EAECF0;border-radius:2px}.zen-comment-item__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px;padding-bottom:32px;margin-left:12px}.zen-comment-item__header{display:flex;align-items:center;gap:8px;white-space:nowrap}.zen-comment-item__author{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054}.zen-comment-item__time{font-family:Inter,sans-serif;font-weight:400;font-size:12px;line-height:18px;color:#667085}.zen-comment-item__text{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085;margin:0;word-break:break-word}.zen-comment-item__attachment{display:flex;align-items:flex-start;gap:12px}.zen-comment-item__attachment-icon{flex-shrink:0;width:32px;height:32px;background:#E3EEFB;border:4px solid #F1F7FE;border-radius:28px;display:flex;align-items:center;justify-content:center}.zen-comment-item__attachment-info{min-width:0}.zen-comment-item__attachment-name{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-comment-item__attachment-size{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-comment-item__actions{display:flex;align-items:center;flex-shrink:0}.zen-comment-item__action-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:10px}.zen-comment-item__action-btn:hover{background:#F2F4F7}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ZenduCommentTextareaComponent, selector: "zen-comment-textarea", inputs: ["value", "label", "placeholder", "rows", "fileTypes", "loading"], outputs: ["valueChange", "addComment", "filesChanged", "save", "cancel"] }] });
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentItemComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: 'zen-comment-item', template: "<div class=\"zen-comment-item\" [class.zen-comment-item--loading]=\"loading\">\n\n <div class=\"zen-comment-item__left\">\n <!-- Avatar -->\n <div class=\"zen-comment-item__avatar\">\n <img *ngIf=\"comment.authorAvatar\"\n [src]=\"comment.authorAvatar\"\n [alt]=\"comment.authorName\"\n class=\"zen-comment-item__avatar-img\" />\n <span *ngIf=\"!comment.authorAvatar\" class=\"zen-comment-item__avatar-initials\">\n {{ initials }}\n </span>\n <span *ngIf=\"comment.online\" class=\"zen-comment-item__online-dot\"></span>\n </div>\n <!-- Connector line -->\n <div *ngIf=\"showConnector\" class=\"zen-comment-item__connector\"></div>\n </div>\n\n <div class=\"zen-comment-item__body\">\n <!-- Header: name + time -->\n <div class=\"zen-comment-item__header\">\n <span class=\"zen-comment-item__author\">{{ comment.authorName }}</span>\n <span class=\"zen-comment-item__time\">{{ comment.timestamp }}</span>\n </div>\n\n <!-- Default view -->\n <ng-container *ngIf=\"!editing\">\n <p class=\"zen-comment-item__text\">{{ comment.text }}</p>\n\n <!-- Attachments -->\n <div class=\"zen-comment-item__attachment\"\n *ngFor=\"let att of comment.attachments\">\n <div class=\"zen-comment-item__attachment-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-comment-item__attachment-info\">\n <div class=\"zen-comment-item__attachment-name\">{{ att.name }}</div>\n <div class=\"zen-comment-item__attachment-size\">{{ att.size }}</div>\n </div>\n </div>\n </ng-container>\n\n <!-- Edit view -->\n <ng-container *ngIf=\"editing\">\n <zen-comment-textarea\n [(value)]=\"editValue\"\n [loading]=\"loading\"\n (save)=\"onSaveEdit($event)\"\n (cancel)=\"onCancelEdit()\">\n </zen-comment-textarea>\n </ng-container>\n </div>\n\n <!-- Actions (always visible, individually controllable) -->\n <div class=\"zen-comment-item__actions\" *ngIf=\"(isEditable || isDeletable) && !editing\">\n <button *ngIf=\"isDeletable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Delete\"\n [disabled]=\"loading\"\n (click)=\"onDelete()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button *ngIf=\"isEditable\"\n type=\"button\"\n class=\"zen-comment-item__action-btn\"\n title=\"Edit\"\n [disabled]=\"loading\"\n (click)=\"onEdit()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17 3C17.2626 2.73735 17.5744 2.52901 17.9176 2.38687C18.2608 2.24473 18.6286 2.17157 19 2.17157C19.3714 2.17157 19.7392 2.24473 20.0824 2.38687C20.4256 2.52901 20.7374 2.73735 21 3C21.2626 3.26264 21.471 3.57444 21.6131 3.9176C21.7553 4.26077 21.8284 4.62856 21.8284 5C21.8284 5.37143 21.7553 5.73923 21.6131 6.08239C21.471 6.42555 21.2626 6.73735 21 7L7.5 20.5L2 22L3.5 16.5L17 3Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n</div>\n", styles: [".zen-comment-item{display:flex;align-items:flex-start;width:100%}.zen-comment-item--loading{opacity:.7;pointer-events:none}.zen-comment-item__left{display:flex;flex-direction:column;align-items:center;gap:4px;padding-bottom:4px;flex-shrink:0}.zen-comment-item__avatar{position:relative;width:32px;height:32px;border-radius:200px;background:#C7B9DA;overflow:visible;flex-shrink:0}.zen-comment-item__avatar-img{width:32px;height:32px;border-radius:200px;object-fit:cover}.zen-comment-item__avatar-initials{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:200px;font-family:Inter,sans-serif;font-weight:500;font-size:12px;color:#fff}.zen-comment-item__online-dot{position:absolute;bottom:0;right:0;width:8px;height:8px;background:#12B76A;border:1.5px solid #fff;border-radius:4px}.zen-comment-item__connector{flex:1;width:2px;min-height:8px;background:#EAECF0;border-radius:2px}.zen-comment-item__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:12px;padding-bottom:32px;margin-left:12px}.zen-comment-item__header{display:flex;align-items:center;gap:8px;white-space:nowrap}.zen-comment-item__author{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054}.zen-comment-item__time{font-family:Inter,sans-serif;font-weight:400;font-size:12px;line-height:18px;color:#667085}.zen-comment-item__text{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085;margin:0;word-break:break-word}.zen-comment-item__attachment{display:flex;align-items:flex-start;gap:12px}.zen-comment-item__attachment-icon{flex-shrink:0;width:32px;height:32px;background:#E3EEFB;border:4px solid #F1F7FE;border-radius:28px;display:flex;align-items:center;justify-content:center}.zen-comment-item__attachment-info{min-width:0}.zen-comment-item__attachment-name{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-comment-item__attachment-size{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-comment-item__actions{display:flex;align-items:center;flex-shrink:0}.zen-comment-item__action-btn{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:10px}.zen-comment-item__action-btn:hover{background:#F2F4F7}\n"] }]
|
|
76
|
+
}], propDecorators: { comment: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], showConnector: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], editable: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], deletable: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], loading: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], edit: [{
|
|
87
|
+
type: Output
|
|
88
|
+
}], delete: [{
|
|
89
|
+
type: Output
|
|
90
|
+
}], saveEdit: [{
|
|
91
|
+
type: Output
|
|
92
|
+
}], cancelEdit: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}] } });
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtY29tbWVudC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb21tZW50LWl0ZW0vemVuZHUtY29tbWVudC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb21tZW50LWl0ZW0vemVuZHUtY29tbWVudC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7O0FBeUJqRyxNQUFNLE9BQU8seUJBQXlCO0lBTHRDO1FBU1csa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUVoQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFZixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUV2QyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUV6QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQTBDLENBQUM7UUFFdEUsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFdkQsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ1AsZUFBVSxHQUFHLEtBQUssQ0FBQztLQXdENUI7SUF0REMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDMUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFNB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QUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQUVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50RGF0YSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gIGF1dGhvck5hbWU6IHN0cmluZztcbiAgYXV0aG9yQXZhdGFyPzogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBvbmxpbmU/OiBib29sZWFuO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGRlbGV0YWJsZT86IGJvb2xlYW47XG4gIGF0dGFjaG1lbnRzPzogQ29tbWVudEF0dGFjaG1lbnREYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudEF0dGFjaG1lbnREYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzaXplOiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnemVuLWNvbW1lbnQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1jb21tZW50LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi96ZW5kdS1jb21tZW50LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVDb21tZW50SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgY29tbWVudDogQ29tbWVudERhdGE7XG5cbiAgQElucHV0KCkgc2hvd0Nvbm5lY3RvciA9IHRydWU7XG5cbiAgQElucHV0KCkgZWRpdGFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRlbGV0YWJsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50RGF0YT4oKTtcblxuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50RGF0YT4oKTtcblxuICBAT3V0cHV0KCkgc2F2ZUVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29tbWVudDogQ29tbWVudERhdGE7IHRleHQ6IHN0cmluZyB9PigpO1xuXG4gIEBPdXRwdXQoKSBjYW5jZWxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21tZW50RGF0YT4oKTtcblxuICBlZGl0aW5nID0gZmFsc2U7XG4gIGVkaXRWYWx1ZSA9ICcnO1xuICBwcml2YXRlIHdhc0xvYWRpbmcgPSBmYWxzZTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSAmJiB0aGlzLndhc0xvYWRpbmcgJiYgIXRoaXMubG9hZGluZyAmJiB0aGlzLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5lZGl0VmFsdWUgPSAnJztcbiAgICB9XG4gICAgdGhpcy53YXNMb2FkaW5nID0gdGhpcy5sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGFibGUgJiYgKHRoaXMuY29tbWVudD8uZWRpdGFibGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBpc0RlbGV0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGFibGUgJiYgKHRoaXMuY29tbWVudD8uZGVsZXRhYmxlICE9PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgaW5pdGlhbHMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY29tbWVudD8uYXV0aG9yTmFtZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLmNvbW1lbnQuYXV0aG9yTmFtZVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAobiA9PiBuWzBdKVxuICAgICAgLmpvaW4oJycpXG4gICAgICAuc3Vic3RyaW5nKDAsIDIpXG4gICAgICAudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIG9uRWRpdCgpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRWYWx1ZSA9IHRoaXMuY29tbWVudC50ZXh0O1xuICAgIHRoaXMuZWRpdC5lbWl0KHRoaXMuY29tbWVudCk7XG4gIH1cblxuICBvbkRlbGV0ZSgpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy5kZWxldGUuZW1pdCh0aGlzLmNvbW1lbnQpO1xuICB9XG5cbiAgb25TYXZlRWRpdChldmVudDogeyB0ZXh0OiBzdHJpbmc7IGZpbGVzOiBGaWxlW10gfSkge1xuICAgIHRoaXMuc2F2ZUVkaXQuZW1pdCh7IGNvbW1lbnQ6IHRoaXMuY29tbWVudCwgdGV4dDogZXZlbnQudGV4dCB9KTtcbiAgfVxuXG4gIG9uQ2FuY2VsRWRpdCgpIHtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY2FuY2VsRWRpdC5lbWl0KHRoaXMuY29tbWVudCk7XG4gIH1cblxuICBnZXRGaWxlSWNvbihuYW1lOiBzdHJpbmcpOiAnZG9jdW1lbnQnIHwgJ3ZpZGVvJyB8ICdtaXNjJyB7XG4gICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGlmIChbJ3BkZicsICdkb2MnLCAnZG9jeCcsICd0eHQnLCAneGxzJywgJ3hsc3gnLCAnY3N2JywgJ3BwdCcsICdwcHR4J10uaW5jbHVkZXMoZXh0KSkgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgaWYgKFsnbXA0JywgJ21vdicsICdhdmknLCAnbWt2JywgJ3dlYm0nLCAnZmx2J10uaW5jbHVkZXMoZXh0KSkgcmV0dXJuICd2aWRlbyc7XG4gICAgcmV0dXJuICdtaXNjJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1cIiBbY2xhc3MuemVuLWNvbW1lbnQtaXRlbS0tbG9hZGluZ109XCJsb2FkaW5nXCI+XG5cbiAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2xlZnRcIj5cbiAgICA8IS0tIEF2YXRhciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtaXRlbV9fYXZhdGFyXCI+XG4gICAgICA8aW1nICpuZ0lmPVwiY29tbWVudC5hdXRob3JBdmF0YXJcIlxuICAgICAgICAgICBbc3JjXT1cImNvbW1lbnQuYXV0aG9yQXZhdGFyXCJcbiAgICAgICAgICAgW2FsdF09XCJjb21tZW50LmF1dGhvck5hbWVcIlxuICAgICAgICAgICBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F2YXRhci1pbWdcIiAvPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbWVudC5hdXRob3JBdmF0YXJcIiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F2YXRhci1pbml0aWFsc1wiPlxuICAgICAgICB7eyBpbml0aWFscyB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjb21tZW50Lm9ubGluZVwiIGNsYXNzPVwiemVuLWNvbW1lbnQtaXRlbV9fb25saW5lLWRvdFwiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIENvbm5lY3RvciBsaW5lIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93Q29ubmVjdG9yXCIgY2xhc3M9XCJ6ZW4tY29tbWVudC1pdGVtX19jb25uZWN0b3JcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2JvZHlcIj5cbiAgICA8IS0tIEhlYWRlcjogbmFtZSArIHRpbWUgLS0+XG4gICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2hlYWRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ6ZW4tY29tbWVudC1pdGVtX19hdXRob3JcIj57eyBjb21tZW50LmF1dGhvck5hbWUgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX3RpbWVcIj57eyBjb21tZW50LnRpbWVzdGFtcCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVmYXVsdCB2aWV3IC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdGluZ1wiPlxuICAgICAgPHAgY2xhc3M9XCJ6ZW4tY29tbWVudC1pdGVtX190ZXh0XCI+e3sgY29tbWVudC50ZXh0IH19PC9wPlxuXG4gICAgICA8IS0tIEF0dGFjaG1lbnRzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F0dGFjaG1lbnRcIlxuICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0IG9mIGNvbW1lbnQuYXR0YWNobWVudHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F0dGFjaG1lbnQtaWNvblwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAySDZDNS40Njk1NyAyIDQuOTYwODYgMi4yMTA3MSA0LjU4NTc5IDIuNTg1NzlDNC4yMTA3MSAyLjk2MDg2IDQgMy40Njk1NyA0IDRWMjBDNCAyMC41MzA0IDQuMjEwNzEgMjEuMDM5MSA0LjU4NTc5IDIxLjQxNDJDNC45NjA4NiAyMS43ODkzIDUuNDY5NTcgMjIgNiAyMkgxOEMxOC41MzA0IDIyIDE5LjAzOTEgMjEuNzg5MyAxOS40MTQyIDIxLjQxNDJDMTkuNzg5MyAyMS4wMzkxIDIwIDIwLjUzMDQgMjAgMjBWOEwxNCAyWlwiIHN0cm9rZT1cIiMxMzZBQjZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjE0LDIgMTQsOCAyMCw4XCIgc3Ryb2tlPVwiIzEzNkFCNlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtaXRlbV9fYXR0YWNobWVudC1pbmZvXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F0dGFjaG1lbnQtbmFtZVwiPnt7IGF0dC5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2F0dGFjaG1lbnQtc2l6ZVwiPnt7IGF0dC5zaXplIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEVkaXQgdmlldyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdGluZ1wiPlxuICAgICAgPHplbi1jb21tZW50LXRleHRhcmVhXG4gICAgICAgIFsodmFsdWUpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICAoc2F2ZSk9XCJvblNhdmVFZGl0KCRldmVudClcIlxuICAgICAgICAoY2FuY2VsKT1cIm9uQ2FuY2VsRWRpdCgpXCI+XG4gICAgICA8L3plbi1jb21tZW50LXRleHRhcmVhPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbnMgKGFsd2F5cyB2aXNpYmxlLCBpbmRpdmlkdWFsbHkgY29udHJvbGxhYmxlKSAtLT5cbiAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LWl0ZW1fX2FjdGlvbnNcIiAqbmdJZj1cIihpc0VkaXRhYmxlIHx8IGlzRGVsZXRhYmxlKSAmJiAhZWRpdGluZ1wiPlxuICAgIDxidXR0b24gKm5nSWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiemVuLWNvbW1lbnQtaXRlbV9fYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICB0aXRsZT1cIkRlbGV0ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoKVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIzLDYgNSw2IDIxLDZcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPHBhdGggZD1cIk0xOSA2VjIwQzE5IDIwLjUzMDQgMTguNzg5MyAyMS4wMzkxIDE4LjQxNDIgMjEuNDE0MkMxOC4wMzkxIDIxLjc4OTMgMTcuNTMwNCAyMiAxNyAyMkg3QzYuNDY5NTcgMjIgNS45NjA4NiAyMS43ODkzIDUuNTg1NzkgMjEuNDE0MkM1LjIxMDcxIDIxLjAzOTEgNSAyMC41MzA0IDUgMjBWNk04IDZWNEM4IDMuNDY5NTcgOC4yMTA3MSAyLjk2MDg2IDguNTg1NzkgMi41ODU3OUM4Ljk2MDg2IDIuMjEwNzEgOS40Njk1NyAyIDEwIDJIMTRDMTQuNTMwNCAyIDE1LjAzOTEgMi4yMTA3MSAxNS40MTQyIDIuNTg1NzlDMTUuNzg5MyAyLjk2MDg2IDE2IDMuNDY5NTcgMTYgNFY2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNFZGl0YWJsZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiemVuLWNvbW1lbnQtaXRlbV9fYWN0aW9uLWJ0blwiXG4gICAgICAgICAgICB0aXRsZT1cIkVkaXRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdCgpXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xNyAzQzE3LjI2MjYgMi43MzczNSAxNy41NzQ0IDIuNTI5MDEgMTcuOTE3NiAyLjM4Njg3QzE4LjI2MDggMi4yNDQ3MyAxOC42Mjg2IDIuMTcxNTcgMTkgMi4xNzE1N0MxOS4zNzE0IDIuMTcxNTcgMTkuNzM5MiAyLjI0NDczIDIwLjA4MjQgMi4zODY4N0MyMC40MjU2IDIuNTI5MDEgMjAuNzM3NCAyLjczNzM1IDIxIDNDMjEuMjYyNiAzLjI2MjY0IDIxLjQ3MSAzLjU3NDQ0IDIxLjYxMzEgMy45MTc2QzIxLjc1NTMgNC4yNjA3NyAyMS44Mjg0IDQuNjI4NTYgMjEuODI4NCA1QzIxLjgyODQgNS4zNzE0MyAyMS43NTUzIDUuNzM5MjMgMjEuNjEzMSA2LjA4MjM5QzIxLjQ3MSA2LjQyNTU1IDIxLjI2MjYgNi43MzczNSAyMSA3TDcuNSAyMC41TDIgMjJMMy41IDE2LjVMMTcgM1pcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../comment-item/zendu-comment-item.component";
|
|
5
|
+
export class ZenduCommentListComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.comments = [];
|
|
8
|
+
this.collapsible = true;
|
|
9
|
+
this.expanded = false;
|
|
10
|
+
this.editable = true;
|
|
11
|
+
this.deletable = true;
|
|
12
|
+
this.loadingCommentId = null;
|
|
13
|
+
this.expandedChange = new EventEmitter();
|
|
14
|
+
this.editComment = new EventEmitter();
|
|
15
|
+
this.deleteComment = new EventEmitter();
|
|
16
|
+
this.saveEditComment = new EventEmitter();
|
|
17
|
+
this.cancelEditComment = new EventEmitter();
|
|
18
|
+
}
|
|
19
|
+
toggle() {
|
|
20
|
+
this.expanded = !this.expanded;
|
|
21
|
+
this.expandedChange.emit(this.expanded);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ZenduCommentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
ZenduCommentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduCommentListComponent, selector: "zen-comment-list", inputs: { comments: "comments", collapsible: "collapsible", expanded: "expanded", editable: "editable", deletable: "deletable", loadingCommentId: "loadingCommentId" }, outputs: { expandedChange: "expandedChange", editComment: "editComment", deleteComment: "deleteComment", saveEditComment: "saveEditComment", cancelEditComment: "cancelEditComment" }, ngImport: i0, template: "<div class=\"zen-comment-list\">\n <!-- Toggle button (only when collapsible) -->\n <button *ngIf=\"collapsible\" type=\"button\" class=\"zen-comment-list__toggle\" (click)=\"toggle()\">\n <span class=\"zen-comment-list__toggle-text\">\n {{ expanded ? 'Hide' : 'Show' }} Comments ({{ comments.length }})\n </span>\n <svg class=\"zen-comment-list__toggle-icon\"\n [class.zen-comment-list__toggle-icon--up]=\"expanded\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Comments list -->\n <div class=\"zen-comment-list__items\" *ngIf=\"!collapsible || expanded\">\n <zen-comment-item\n *ngFor=\"let c of comments; let last = last\"\n [comment]=\"c\"\n [showConnector]=\"!last\"\n [editable]=\"editable\"\n [deletable]=\"deletable\"\n [loading]=\"loadingCommentId === c.id\"\n (edit)=\"editComment.emit($event)\"\n (delete)=\"deleteComment.emit($event)\"\n (saveEdit)=\"saveEditComment.emit($event)\"\n (cancelEdit)=\"cancelEditComment.emit($event)\">\n </zen-comment-item>\n </div>\n</div>\n", styles: [".zen-comment-list{display:flex;flex-direction:column;gap:16px;width:100%}.zen-comment-list__toggle{display:flex;align-items:center;gap:8px;border:none;background:transparent;cursor:pointer;padding:0}.zen-comment-list__toggle-text{font-family:Inter,sans-serif;font-weight:500;font-size:16px;line-height:24px;color:#667085}.zen-comment-list__toggle-icon{flex-shrink:0;transition:transform .2s ease}.zen-comment-list__toggle-icon--up{transform:rotate(180deg)}.zen-comment-list__items{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ZenduCommentItemComponent, selector: "zen-comment-item", inputs: ["comment", "showConnector", "editable", "deletable", "loading"], outputs: ["edit", "delete", "saveEdit", "cancelEdit"] }] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentListComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'zen-comment-list', template: "<div class=\"zen-comment-list\">\n <!-- Toggle button (only when collapsible) -->\n <button *ngIf=\"collapsible\" type=\"button\" class=\"zen-comment-list__toggle\" (click)=\"toggle()\">\n <span class=\"zen-comment-list__toggle-text\">\n {{ expanded ? 'Hide' : 'Show' }} Comments ({{ comments.length }})\n </span>\n <svg class=\"zen-comment-list__toggle-icon\"\n [class.zen-comment-list__toggle-icon--up]=\"expanded\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Comments list -->\n <div class=\"zen-comment-list__items\" *ngIf=\"!collapsible || expanded\">\n <zen-comment-item\n *ngFor=\"let c of comments; let last = last\"\n [comment]=\"c\"\n [showConnector]=\"!last\"\n [editable]=\"editable\"\n [deletable]=\"deletable\"\n [loading]=\"loadingCommentId === c.id\"\n (edit)=\"editComment.emit($event)\"\n (delete)=\"deleteComment.emit($event)\"\n (saveEdit)=\"saveEditComment.emit($event)\"\n (cancelEdit)=\"cancelEditComment.emit($event)\">\n </zen-comment-item>\n </div>\n</div>\n", styles: [".zen-comment-list{display:flex;flex-direction:column;gap:16px;width:100%}.zen-comment-list__toggle{display:flex;align-items:center;gap:8px;border:none;background:transparent;cursor:pointer;padding:0}.zen-comment-list__toggle-text{font-family:Inter,sans-serif;font-weight:500;font-size:16px;line-height:24px;color:#667085}.zen-comment-list__toggle-icon{flex-shrink:0;transition:transform .2s ease}.zen-comment-list__toggle-icon--up{transform:rotate(180deg)}.zen-comment-list__items{display:flex;flex-direction:column}\n"] }]
|
|
29
|
+
}], propDecorators: { comments: [{
|
|
30
|
+
type: Input
|
|
31
|
+
}], collapsible: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}], expanded: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], editable: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}], deletable: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], loadingCommentId: [{
|
|
40
|
+
type: Input
|
|
41
|
+
}], expandedChange: [{
|
|
42
|
+
type: Output
|
|
43
|
+
}], editComment: [{
|
|
44
|
+
type: Output
|
|
45
|
+
}], deleteComment: [{
|
|
46
|
+
type: Output
|
|
47
|
+
}], saveEditComment: [{
|
|
48
|
+
type: Output
|
|
49
|
+
}], cancelEditComment: [{
|
|
50
|
+
type: Output
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtY29tbWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb21tZW50LWxpc3QvemVuZHUtY29tbWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb21tZW50LWxpc3QvemVuZHUtY29tbWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRdkUsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQU9XLGFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBRTdCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsYUFBUSxHQUFHLElBQUksQ0FBQztRQUVoQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRWpCLHFCQUFnQixHQUEyQixJQUFJLENBQUM7UUFFL0MsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTdDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUU5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFaEQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBMEMsQ0FBQztRQUU3RSxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0tBTS9EO0lBSkMsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDOzt1SEEzQlUseUJBQXlCOzJHQUF6Qix5QkFBeUIsdVpDUnRDLHl4Q0E2QkE7NEZEckJhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxrQkFBa0I7OEJBTW5CLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbWVudERhdGEgfSBmcm9tICcuLi9jb21tZW50LWl0ZW0vemVuZHUtY29tbWVudC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3plbi1jb21tZW50LWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtY29tbWVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vemVuZHUtY29tbWVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1Q29tbWVudExpc3RDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGNvbW1lbnRzOiBDb21tZW50RGF0YVtdID0gW107XG5cbiAgQElucHV0KCkgY29sbGFwc2libGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZWRpdGFibGUgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGRlbGV0YWJsZSA9IHRydWU7XG5cbiAgQElucHV0KCkgbG9hZGluZ0NvbW1lbnRJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgQE91dHB1dCgpIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKSBlZGl0Q29tbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudERhdGE+KCk7XG5cbiAgQE91dHB1dCgpIGRlbGV0ZUNvbW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbW1lbnREYXRhPigpO1xuXG4gIEBPdXRwdXQoKSBzYXZlRWRpdENvbW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29tbWVudDogQ29tbWVudERhdGE7IHRleHQ6IHN0cmluZyB9PigpO1xuXG4gIEBPdXRwdXQoKSBjYW5jZWxFZGl0Q29tbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29tbWVudERhdGE+KCk7XG5cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5leHBhbmRlZDtcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ6ZW4tY29tbWVudC1saXN0XCI+XG4gIDwhLS0gVG9nZ2xlIGJ1dHRvbiAob25seSB3aGVuIGNvbGxhcHNpYmxlKSAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cImNvbGxhcHNpYmxlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiemVuLWNvbW1lbnQtbGlzdF9fdG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJ6ZW4tY29tbWVudC1saXN0X190b2dnbGUtdGV4dFwiPlxuICAgICAge3sgZXhwYW5kZWQgPyAnSGlkZScgOiAnU2hvdycgfX0gQ29tbWVudHMgKHt7IGNvbW1lbnRzLmxlbmd0aCB9fSlcbiAgICA8L3NwYW4+XG4gICAgPHN2ZyBjbGFzcz1cInplbi1jb21tZW50LWxpc3RfX3RvZ2dsZS1pY29uXCJcbiAgICAgICAgIFtjbGFzcy56ZW4tY29tbWVudC1saXN0X190b2dnbGUtaWNvbi0tdXBdPVwiZXhwYW5kZWRcIlxuICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIENvbW1lbnRzIGxpc3QgLS0+XG4gIDxkaXYgY2xhc3M9XCJ6ZW4tY29tbWVudC1saXN0X19pdGVtc1wiICpuZ0lmPVwiIWNvbGxhcHNpYmxlIHx8IGV4cGFuZGVkXCI+XG4gICAgPHplbi1jb21tZW50LWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBjIG9mIGNvbW1lbnRzOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgW2NvbW1lbnRdPVwiY1wiXG4gICAgICBbc2hvd0Nvbm5lY3Rvcl09XCIhbGFzdFwiXG4gICAgICBbZWRpdGFibGVdPVwiZWRpdGFibGVcIlxuICAgICAgW2RlbGV0YWJsZV09XCJkZWxldGFibGVcIlxuICAgICAgW2xvYWRpbmddPVwibG9hZGluZ0NvbW1lbnRJZCA9PT0gYy5pZFwiXG4gICAgICAoZWRpdCk9XCJlZGl0Q29tbWVudC5lbWl0KCRldmVudClcIlxuICAgICAgKGRlbGV0ZSk9XCJkZWxldGVDb21tZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoc2F2ZUVkaXQpPVwic2F2ZUVkaXRDb21tZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoY2FuY2VsRWRpdCk9XCJjYW5jZWxFZGl0Q29tbWVudC5lbWl0KCRldmVudClcIj5cbiAgICA8L3plbi1jb21tZW50LWl0ZW0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
const EMOJI_CATEGORIES = [
|
|
5
|
+
{
|
|
6
|
+
key: 'smileys', label: 'Smileys', icon: '😀',
|
|
7
|
+
emojis: ['😀', '😄', '😁', '😆', '😅', '🤣', '😂', '🙂', '😉', '😊', '🥰', '😍', '😘', '😋', '😛', '😜', '🤔', '😏', '🙄', '😬', '😴', '🤯']
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
key: 'gestures', label: 'Gestures', icon: '👋',
|
|
11
|
+
emojis: ['👋', '✋', '👌', '✌', '🤞', '🤙', '👍', '👎', '👏', '🙌', '🤝', '🙏']
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
key: 'hearts', label: 'Hearts', icon: '❤️',
|
|
15
|
+
emojis: ['❤️', '🧡', '💛', '💚', '💙', '💜', '🖤', '💔', '💕', '💖']
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: 'objects', label: 'Objects', icon: '⭐',
|
|
19
|
+
emojis: ['⭐', '🔥', '✨', '🎉', '🏆', '💯', '✅', '❌', '⚡', '💡', '🔔', '🔗']
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
export class ZenduCommentTextareaComponent {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.value = '';
|
|
25
|
+
this.valueChange = new EventEmitter();
|
|
26
|
+
this.label = '';
|
|
27
|
+
this.placeholder = 'Enter a comment...';
|
|
28
|
+
this.rows = 4;
|
|
29
|
+
this.fileTypes = '*/*';
|
|
30
|
+
this.loading = false;
|
|
31
|
+
this.addComment = new EventEmitter();
|
|
32
|
+
this.filesChanged = new EventEmitter();
|
|
33
|
+
this.save = new EventEmitter();
|
|
34
|
+
this.cancel = new EventEmitter();
|
|
35
|
+
this.editing = false;
|
|
36
|
+
this.emojiPickerOpen = false;
|
|
37
|
+
this.emojiCategories = EMOJI_CATEGORIES;
|
|
38
|
+
this.activeEmojiCategory = EMOJI_CATEGORIES[0].key;
|
|
39
|
+
this.attachments = [];
|
|
40
|
+
}
|
|
41
|
+
ngOnInit() {
|
|
42
|
+
if (this.value?.length > 0) {
|
|
43
|
+
this.editing = true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
onDocumentClick(event) {
|
|
47
|
+
if (!this.emojiPickerOpen)
|
|
48
|
+
return;
|
|
49
|
+
const target = event.target;
|
|
50
|
+
if (!target.closest('.zen-emoji-picker') && !target.closest('.zen-comment-textarea__icon-btn[title="Emoji"]')) {
|
|
51
|
+
this.emojiPickerOpen = false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
onInput(value) {
|
|
55
|
+
this.value = value;
|
|
56
|
+
this.valueChange.emit(value);
|
|
57
|
+
this.editing = value.length > 0 || this.attachments.length > 0;
|
|
58
|
+
}
|
|
59
|
+
onKeydown(event) {
|
|
60
|
+
if (event.key === 'Enter' && !event.shiftKey) {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
this.onAddComment();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
onAddComment() {
|
|
66
|
+
if (this.loading)
|
|
67
|
+
return;
|
|
68
|
+
if (this.value.trim() || this.attachments.length) {
|
|
69
|
+
this.addComment.emit({ text: this.value, files: this.attachments.map(a => a.file) });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
onSave() {
|
|
73
|
+
if (this.loading)
|
|
74
|
+
return;
|
|
75
|
+
if (this.value.trim() || this.attachments.length) {
|
|
76
|
+
this.save.emit({ text: this.value, files: this.attachments.map(a => a.file) });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
reset() {
|
|
80
|
+
this.value = '';
|
|
81
|
+
this.valueChange.emit(this.value);
|
|
82
|
+
this.attachments = [];
|
|
83
|
+
this.filesChanged.emit([]);
|
|
84
|
+
this.editing = false;
|
|
85
|
+
}
|
|
86
|
+
onCancel() {
|
|
87
|
+
this.value = '';
|
|
88
|
+
this.valueChange.emit(this.value);
|
|
89
|
+
this.attachments = [];
|
|
90
|
+
this.filesChanged.emit([]);
|
|
91
|
+
this.editing = false;
|
|
92
|
+
this.cancel.emit();
|
|
93
|
+
}
|
|
94
|
+
toggleEmojiPicker() {
|
|
95
|
+
this.emojiPickerOpen = !this.emojiPickerOpen;
|
|
96
|
+
}
|
|
97
|
+
selectEmoji(emoji) {
|
|
98
|
+
this.value += emoji;
|
|
99
|
+
this.valueChange.emit(this.value);
|
|
100
|
+
this.editing = true;
|
|
101
|
+
this.emojiPickerOpen = false;
|
|
102
|
+
}
|
|
103
|
+
setEmojiCategory(key) {
|
|
104
|
+
this.activeEmojiCategory = key;
|
|
105
|
+
}
|
|
106
|
+
get activeEmojis() {
|
|
107
|
+
const cat = this.emojiCategories.find(c => c.key === this.activeEmojiCategory);
|
|
108
|
+
return cat ? cat.emojis : [];
|
|
109
|
+
}
|
|
110
|
+
onFileInput(event) {
|
|
111
|
+
const input = event.target;
|
|
112
|
+
if (!input.files?.length)
|
|
113
|
+
return;
|
|
114
|
+
for (let i = 0; i < input.files.length; i++) {
|
|
115
|
+
const file = input.files[i];
|
|
116
|
+
this.attachments.push({
|
|
117
|
+
file,
|
|
118
|
+
name: file.name,
|
|
119
|
+
size: this.formatFileSize(file.size),
|
|
120
|
+
progress: 100,
|
|
121
|
+
complete: true,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
this.editing = true;
|
|
125
|
+
this.filesChanged.emit(this.attachments.map(a => a.file));
|
|
126
|
+
input.value = '';
|
|
127
|
+
}
|
|
128
|
+
removeAttachment(index) {
|
|
129
|
+
this.attachments.splice(index, 1);
|
|
130
|
+
this.filesChanged.emit(this.attachments.map(a => a.file));
|
|
131
|
+
if (!this.attachments.length && !this.value) {
|
|
132
|
+
this.editing = false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
getFileIcon(name) {
|
|
136
|
+
const ext = name.split('.').pop()?.toLowerCase() || '';
|
|
137
|
+
if (['pdf', 'doc', 'docx', 'txt', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'].includes(ext))
|
|
138
|
+
return 'document';
|
|
139
|
+
if (['mp4', 'mov', 'avi', 'mkv', 'webm', 'flv'].includes(ext))
|
|
140
|
+
return 'video';
|
|
141
|
+
return 'misc';
|
|
142
|
+
}
|
|
143
|
+
formatFileSize(bytes) {
|
|
144
|
+
if (bytes < 1024)
|
|
145
|
+
return bytes + ' B';
|
|
146
|
+
if (bytes < 1024 * 1024)
|
|
147
|
+
return (bytes / 1024).toFixed(0) + ' KB';
|
|
148
|
+
return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
ZenduCommentTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
+
ZenduCommentTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduCommentTextareaComponent, selector: "zen-comment-textarea", inputs: { value: "value", label: "label", placeholder: "placeholder", rows: "rows", fileTypes: "fileTypes", loading: "loading" }, outputs: { valueChange: "valueChange", addComment: "addComment", filesChanged: "filesChanged", save: "save", cancel: "cancel" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"zen-comment-textarea\" [class.zen-comment-textarea--loading]=\"loading\">\n <!-- Label -->\n <label *ngIf=\"label\" class=\"zen-comment-textarea__label\">{{ label }}</label>\n\n <!-- Main box (top: attachments + textarea, bottom: toolbar) -->\n <div class=\"zen-comment-textarea__input-wrapper\">\n <!-- Attachments inside the textarea area -->\n <div class=\"zen-comment-textarea__attachments\" *ngIf=\"attachments.length\">\n <div class=\"zen-attachment\"\n *ngFor=\"let att of attachments; let i = index\">\n <div class=\"zen-attachment__content\">\n <div class=\"zen-attachment__icon\" [ngSwitch]=\"getFileIcon(att.name)\">\n <svg *ngSwitchCase=\"'document'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'video'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'misc'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"16,16 12,12 8,16\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-attachment__info\">\n <div class=\"zen-attachment__name\">{{ att.name }}</div>\n <div class=\"zen-attachment__size\">{{ att.size }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"zen-attachment__remove\" (click)=\"removeAttachment(i)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Textarea -->\n <textarea class=\"zen-comment-textarea__input\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"loading\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"></textarea>\n </div>\n\n <!-- Toolbar (bottom part with rounded bottom corners) -->\n <div class=\"zen-comment-textarea__toolbar\">\n <div class=\"zen-comment-textarea__toolbar-divider\"></div>\n\n <div class=\"zen-comment-textarea__toolbar-content\">\n <!-- Icon buttons -->\n <div class=\"zen-comment-textarea__toolbar-icons\">\n <div class=\"zen-comment-textarea__emoji-wrapper\">\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n [class.zen-comment-textarea__icon-btn--active]=\"emojiPickerOpen\"\n title=\"Emoji\"\n (click)=\"toggleEmojiPicker()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 14C8 14 9.5 16 12 16C14.5 16 16 14 16 14\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Emoji picker -->\n <div class=\"zen-emoji-picker\" *ngIf=\"emojiPickerOpen\">\n <div class=\"zen-emoji-picker__grid\">\n <button type=\"button\"\n class=\"zen-emoji-picker__emoji\"\n *ngFor=\"let emoji of activeEmojis\"\n (click)=\"selectEmoji(emoji)\">\n {{ emoji }}\n </button>\n </div>\n <div class=\"zen-emoji-picker__categories\">\n <button type=\"button\"\n class=\"zen-emoji-picker__category\"\n [class.zen-emoji-picker__category--active]=\"cat.key === activeEmojiCategory\"\n *ngFor=\"let cat of emojiCategories\"\n (click)=\"setEmojiCategory(cat.key)\">\n {{ cat.icon }}\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n title=\"Attach file\"\n (click)=\"fileInput.click()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.44 11.05L12.25 20.24C11.1242 21.3658 9.59723 21.9983 8.00505 21.9983C6.41286 21.9983 4.88589 21.3658 3.76005 20.24C2.6342 19.1142 2.00171 17.5872 2.00171 15.995C2.00171 14.4029 2.6342 12.8759 3.76005 11.75L12.95 2.56C13.7006 1.80944 14.7186 1.3877 15.78 1.3877C16.8415 1.3877 17.8595 1.80944 18.61 2.56C19.3606 3.31057 19.7823 4.32863 19.7823 5.39C19.7823 6.45138 19.3606 7.46944 18.61 8.22L9.41005 17.41C9.03476 17.7853 8.52573 17.9961 7.99505 17.9961C7.46436 17.9961 6.95533 17.7853 6.58005 17.41C6.20476 17.0347 5.99389 16.5257 5.99389 15.995C5.99389 15.4644 6.20476 14.9553 6.58005 14.58L15.07 6.1\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <input type=\"file\" #fileInput [accept]=\"fileTypes\" multiple hidden (change)=\"onFileInput($event)\" />\n </div>\n\n <!-- Right side actions -->\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"!editing\">\n <span class=\"zen-comment-textarea__hint\">Press enter</span>\n <svg class=\"zen-comment-textarea__return-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33337 12.5L6.66671 15.8333M3.33337 12.5L6.66671 9.16667M3.33337 12.5H13.3334C14.2175 12.5 15.0653 12.1488 15.6904 11.5237C16.3155 10.8986 16.6667 10.0507 16.6667 9.16667V4.16667\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-comment-textarea__hint\">to</span>\n <button type=\"button\" class=\"zen-comment-textarea__add-btn\" [disabled]=\"loading\" (click)=\"onAddComment()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Sending...' : 'Add Comment' }}\n </button>\n </div>\n\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"editing\">\n <button type=\"button\" class=\"zen-comment-textarea__cancel-btn\" [disabled]=\"loading\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button type=\"button\" class=\"zen-comment-textarea__save-btn\" [disabled]=\"loading\" (click)=\"onSave()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".zen-comment-textarea{display:flex;flex-direction:column;width:100%}.zen-comment-textarea--loading{opacity:.7;pointer-events:none}.zen-comment-textarea__spinner{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:zen-spin .6s linear infinite;vertical-align:middle;margin-right:4px}.zen-comment-textarea__label{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;margin-bottom:6px}.zen-comment-textarea__input-wrapper{background:#FFFFFF;border:1px solid #D0D5DD;border-bottom:none;border-radius:8px 8px 0 0;box-shadow:0 1px 2px #1018280d}.zen-comment-textarea__attachments{display:flex;flex-direction:column;gap:8px;padding:10px 14px 0}.zen-comment-textarea__input{display:block;width:100%;min-height:86px;padding:10px 14px 0;border:none;outline:none;resize:vertical;font-family:Inter,sans-serif;font-weight:400;font-size:16px;line-height:24px;color:#101828;background:transparent;box-sizing:border-box}.zen-comment-textarea__input::placeholder{color:#667085}.zen-comment-textarea__toolbar{background:#FFFFFF;border:1px solid #D0D5DD;border-top:none;border-radius:0 0 8px 8px;padding:0 14px 8px}.zen-comment-textarea__toolbar-divider{height:1px;background:#EAECF0;margin-bottom:8px}.zen-comment-textarea__toolbar-content{display:flex;align-items:center;justify-content:space-between}.zen-comment-textarea__toolbar-icons{display:flex;gap:4px;align-items:center}.zen-comment-textarea__emoji-wrapper{position:relative}.zen-comment-textarea__icon-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:8px}.zen-comment-textarea__icon-btn:hover,.zen-comment-textarea__icon-btn--active{background:#F2F4F7}.zen-comment-textarea__icon-btn svg{flex-shrink:0}.zen-comment-textarea__actions{display:flex;align-items:center;gap:6px}.zen-comment-textarea__hint{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-comment-textarea__return-icon{flex-shrink:0}.zen-comment-textarea__add-btn{border:none;background:transparent;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#105494;cursor:pointer;padding:0}.zen-comment-textarea__add-btn:hover{text-decoration:underline}.zen-comment-textarea__cancel-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 16px;background:#FFFFFF;border:1px solid #D0D5DD;border-radius:8px;box-shadow:0 1px 2px #1018280d;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;cursor:pointer}.zen-comment-textarea__cancel-btn:hover{background:#F9FAFB}.zen-comment-textarea__save-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 16px;background:#136AB6;border:1px solid #136AB6;border-radius:8px;box-shadow:0 1px 2px #1018280d;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#fff;cursor:pointer}.zen-comment-textarea__save-btn:hover{background:#105494;border-color:#105494}.zen-attachment{display:flex;align-items:center;gap:4px;padding:12px;background:#F9FAFB;border:1px solid #EAECF0;border-radius:8px}.zen-attachment__content{display:flex;flex:1;gap:12px;align-items:center;min-width:0}.zen-attachment__icon{flex-shrink:0;width:32px;height:32px;background:#E3EEFB;border:4px solid #F1F7FE;border-radius:28px;display:flex;align-items:center;justify-content:center}.zen-attachment__info{flex:1;min-width:0}.zen-attachment__name{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-attachment__size{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-attachment__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:8px;margin:-8px}.zen-attachment__remove:hover{background:#F2F4F7}.zen-emoji-picker{position:absolute;bottom:calc(100% + 4px);left:0;z-index:1000;background:#FFFFFF;border:1px solid #EAECF0;border-radius:12px;box-shadow:0 4px 16px #1018281f;width:320px;overflow:hidden}.zen-emoji-picker__grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;padding:12px;max-height:200px;overflow-y:auto}.zen-emoji-picker__emoji{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:20px;line-height:1;padding:0}.zen-emoji-picker__emoji:hover{background:#F2F4F7}.zen-emoji-picker__categories{display:flex;gap:4px;padding:8px 12px;border-top:1px solid #EAECF0}.zen-emoji-picker__category{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:16px;padding:0}.zen-emoji-picker__category:hover{background:#F2F4F7}.zen-emoji-picker__category--active{background:#E3EEFB}@keyframes zen-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
|
|
153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduCommentTextareaComponent, decorators: [{
|
|
154
|
+
type: Component,
|
|
155
|
+
args: [{ selector: 'zen-comment-textarea', template: "<div class=\"zen-comment-textarea\" [class.zen-comment-textarea--loading]=\"loading\">\n <!-- Label -->\n <label *ngIf=\"label\" class=\"zen-comment-textarea__label\">{{ label }}</label>\n\n <!-- Main box (top: attachments + textarea, bottom: toolbar) -->\n <div class=\"zen-comment-textarea__input-wrapper\">\n <!-- Attachments inside the textarea area -->\n <div class=\"zen-comment-textarea__attachments\" *ngIf=\"attachments.length\">\n <div class=\"zen-attachment\"\n *ngFor=\"let att of attachments; let i = index\">\n <div class=\"zen-attachment__content\">\n <div class=\"zen-attachment__icon\" [ngSwitch]=\"getFileIcon(att.name)\">\n <svg *ngSwitchCase=\"'document'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"14,2 14,8 20,8\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'video'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngSwitchCase=\"'misc'\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"16,16 12,12 8,16\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\" stroke=\"#136AB6\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"zen-attachment__info\">\n <div class=\"zen-attachment__name\">{{ att.name }}</div>\n <div class=\"zen-attachment__size\">{{ att.size }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"zen-attachment__remove\" (click)=\"removeAttachment(i)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polyline points=\"3,6 5,6 21,6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <!-- Textarea -->\n <textarea class=\"zen-comment-textarea__input\"\n [rows]=\"rows\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"loading\"\n (input)=\"onInput($any($event.target).value)\"\n (keydown)=\"onKeydown($event)\"></textarea>\n </div>\n\n <!-- Toolbar (bottom part with rounded bottom corners) -->\n <div class=\"zen-comment-textarea__toolbar\">\n <div class=\"zen-comment-textarea__toolbar-divider\"></div>\n\n <div class=\"zen-comment-textarea__toolbar-content\">\n <!-- Icon buttons -->\n <div class=\"zen-comment-textarea__toolbar-icons\">\n <div class=\"zen-comment-textarea__emoji-wrapper\">\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n [class.zen-comment-textarea__icon-btn--active]=\"emojiPickerOpen\"\n title=\"Emoji\"\n (click)=\"toggleEmojiPicker()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8 14C8 14 9.5 16 12 16C14.5 16 16 14 16 14\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Emoji picker -->\n <div class=\"zen-emoji-picker\" *ngIf=\"emojiPickerOpen\">\n <div class=\"zen-emoji-picker__grid\">\n <button type=\"button\"\n class=\"zen-emoji-picker__emoji\"\n *ngFor=\"let emoji of activeEmojis\"\n (click)=\"selectEmoji(emoji)\">\n {{ emoji }}\n </button>\n </div>\n <div class=\"zen-emoji-picker__categories\">\n <button type=\"button\"\n class=\"zen-emoji-picker__category\"\n [class.zen-emoji-picker__category--active]=\"cat.key === activeEmojiCategory\"\n *ngFor=\"let cat of emojiCategories\"\n (click)=\"setEmojiCategory(cat.key)\">\n {{ cat.icon }}\n </button>\n </div>\n </div>\n </div>\n\n <button type=\"button\"\n class=\"zen-comment-textarea__icon-btn\"\n title=\"Attach file\"\n (click)=\"fileInput.click()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21.44 11.05L12.25 20.24C11.1242 21.3658 9.59723 21.9983 8.00505 21.9983C6.41286 21.9983 4.88589 21.3658 3.76005 20.24C2.6342 19.1142 2.00171 17.5872 2.00171 15.995C2.00171 14.4029 2.6342 12.8759 3.76005 11.75L12.95 2.56C13.7006 1.80944 14.7186 1.3877 15.78 1.3877C16.8415 1.3877 17.8595 1.80944 18.61 2.56C19.3606 3.31057 19.7823 4.32863 19.7823 5.39C19.7823 6.45138 19.3606 7.46944 18.61 8.22L9.41005 17.41C9.03476 17.7853 8.52573 17.9961 7.99505 17.9961C7.46436 17.9961 6.95533 17.7853 6.58005 17.41C6.20476 17.0347 5.99389 16.5257 5.99389 15.995C5.99389 15.4644 6.20476 14.9553 6.58005 14.58L15.07 6.1\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <input type=\"file\" #fileInput [accept]=\"fileTypes\" multiple hidden (change)=\"onFileInput($event)\" />\n </div>\n\n <!-- Right side actions -->\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"!editing\">\n <span class=\"zen-comment-textarea__hint\">Press enter</span>\n <svg class=\"zen-comment-textarea__return-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.33337 12.5L6.66671 15.8333M3.33337 12.5L6.66671 9.16667M3.33337 12.5H13.3334C14.2175 12.5 15.0653 12.1488 15.6904 11.5237C16.3155 10.8986 16.6667 10.0507 16.6667 9.16667V4.16667\" stroke=\"#667085\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"zen-comment-textarea__hint\">to</span>\n <button type=\"button\" class=\"zen-comment-textarea__add-btn\" [disabled]=\"loading\" (click)=\"onAddComment()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Sending...' : 'Add Comment' }}\n </button>\n </div>\n\n <div class=\"zen-comment-textarea__actions\" *ngIf=\"editing\">\n <button type=\"button\" class=\"zen-comment-textarea__cancel-btn\" [disabled]=\"loading\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button type=\"button\" class=\"zen-comment-textarea__save-btn\" [disabled]=\"loading\" (click)=\"onSave()\">\n <span class=\"zen-comment-textarea__spinner\" *ngIf=\"loading\"></span>\n {{ loading ? 'Saving...' : 'Save' }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".zen-comment-textarea{display:flex;flex-direction:column;width:100%}.zen-comment-textarea--loading{opacity:.7;pointer-events:none}.zen-comment-textarea__spinner{display:inline-block;width:14px;height:14px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:zen-spin .6s linear infinite;vertical-align:middle;margin-right:4px}.zen-comment-textarea__label{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;margin-bottom:6px}.zen-comment-textarea__input-wrapper{background:#FFFFFF;border:1px solid #D0D5DD;border-bottom:none;border-radius:8px 8px 0 0;box-shadow:0 1px 2px #1018280d}.zen-comment-textarea__attachments{display:flex;flex-direction:column;gap:8px;padding:10px 14px 0}.zen-comment-textarea__input{display:block;width:100%;min-height:86px;padding:10px 14px 0;border:none;outline:none;resize:vertical;font-family:Inter,sans-serif;font-weight:400;font-size:16px;line-height:24px;color:#101828;background:transparent;box-sizing:border-box}.zen-comment-textarea__input::placeholder{color:#667085}.zen-comment-textarea__toolbar{background:#FFFFFF;border:1px solid #D0D5DD;border-top:none;border-radius:0 0 8px 8px;padding:0 14px 8px}.zen-comment-textarea__toolbar-divider{height:1px;background:#EAECF0;margin-bottom:8px}.zen-comment-textarea__toolbar-content{display:flex;align-items:center;justify-content:space-between}.zen-comment-textarea__toolbar-icons{display:flex;gap:4px;align-items:center}.zen-comment-textarea__emoji-wrapper{position:relative}.zen-comment-textarea__icon-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:8px}.zen-comment-textarea__icon-btn:hover,.zen-comment-textarea__icon-btn--active{background:#F2F4F7}.zen-comment-textarea__icon-btn svg{flex-shrink:0}.zen-comment-textarea__actions{display:flex;align-items:center;gap:6px}.zen-comment-textarea__hint{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-comment-textarea__return-icon{flex-shrink:0}.zen-comment-textarea__add-btn{border:none;background:transparent;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#105494;cursor:pointer;padding:0}.zen-comment-textarea__add-btn:hover{text-decoration:underline}.zen-comment-textarea__cancel-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 16px;background:#FFFFFF;border:1px solid #D0D5DD;border-radius:8px;box-shadow:0 1px 2px #1018280d;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;cursor:pointer}.zen-comment-textarea__cancel-btn:hover{background:#F9FAFB}.zen-comment-textarea__save-btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 16px;background:#136AB6;border:1px solid #136AB6;border-radius:8px;box-shadow:0 1px 2px #1018280d;font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#fff;cursor:pointer}.zen-comment-textarea__save-btn:hover{background:#105494;border-color:#105494}.zen-attachment{display:flex;align-items:center;gap:4px;padding:12px;background:#F9FAFB;border:1px solid #EAECF0;border-radius:8px}.zen-attachment__content{display:flex;flex:1;gap:12px;align-items:center;min-width:0}.zen-attachment__icon{flex-shrink:0;width:32px;height:32px;background:#E3EEFB;border:4px solid #F1F7FE;border-radius:28px;display:flex;align-items:center;justify-content:center}.zen-attachment__info{flex:1;min-width:0}.zen-attachment__name{font-family:Inter,sans-serif;font-weight:500;font-size:14px;line-height:20px;color:#344054;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-attachment__size{font-family:Inter,sans-serif;font-weight:400;font-size:14px;line-height:20px;color:#667085}.zen-attachment__remove{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:none;background:transparent;border-radius:8px;cursor:pointer;padding:8px;margin:-8px}.zen-attachment__remove:hover{background:#F2F4F7}.zen-emoji-picker{position:absolute;bottom:calc(100% + 4px);left:0;z-index:1000;background:#FFFFFF;border:1px solid #EAECF0;border-radius:12px;box-shadow:0 4px 16px #1018281f;width:320px;overflow:hidden}.zen-emoji-picker__grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;padding:12px;max-height:200px;overflow-y:auto}.zen-emoji-picker__emoji{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:20px;line-height:1;padding:0}.zen-emoji-picker__emoji:hover{background:#F2F4F7}.zen-emoji-picker__categories{display:flex;gap:4px;padding:8px 12px;border-top:1px solid #EAECF0}.zen-emoji-picker__category{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;border-radius:8px;cursor:pointer;font-size:16px;padding:0}.zen-emoji-picker__category:hover{background:#F2F4F7}.zen-emoji-picker__category--active{background:#E3EEFB}@keyframes zen-spin{to{transform:rotate(360deg)}}\n"] }]
|
|
156
|
+
}], propDecorators: { value: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], valueChange: [{
|
|
159
|
+
type: Output
|
|
160
|
+
}], label: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], placeholder: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], rows: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], fileTypes: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], loading: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], addComment: [{
|
|
171
|
+
type: Output
|
|
172
|
+
}], filesChanged: [{
|
|
173
|
+
type: Output
|
|
174
|
+
}], save: [{
|
|
175
|
+
type: Output
|
|
176
|
+
}], cancel: [{
|
|
177
|
+
type: Output
|
|
178
|
+
}], onDocumentClick: [{
|
|
179
|
+
type: HostListener,
|
|
180
|
+
args: ['document:click', ['$event']]
|
|
181
|
+
}] } });
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtY29tbWVudC10ZXh0YXJlYS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvY29tbWVudC10ZXh0YXJlYS96ZW5kdS1jb21tZW50LXRleHRhcmVhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9jb21tZW50LXRleHRhcmVhL3plbmR1LWNvbW1lbnQtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQWlCdkIsTUFBTSxnQkFBZ0IsR0FBb0I7SUFDeEM7UUFDRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUk7UUFDNUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDO0tBQ3hIO0lBQ0Q7UUFDRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUk7UUFDOUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUMsR0FBRyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVB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QkFFRyxJQUFJO3NCQUFiLE1BQU07Z0JBRUcsTUFBTTtzQkFBZixNQUFNO2dCQWVQLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudEF0dGFjaG1lbnQge1xuICBmaWxlOiBGaWxlO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNpemU6IHN0cmluZztcbiAgcHJvZ3Jlc3M6IG51bWJlcjtcbiAgY29tcGxldGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1vamlDYXRlZ29yeSB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGVtb2ppczogc3RyaW5nW107XG59XG5cbmNvbnN0IEVNT0pJX0NBVEVHT1JJRVM6IEVtb2ppQ2F0ZWdvcnlbXSA9IFtcbiAge1xuICAgIGtleTogJ3NtaWxleXMnLCBsYWJlbDogJ1NtaWxleXMnLCBpY29uOiAn8J+YgCcsXG4gICAgZW1vamlzOiBbJ/CfmIAnLCfwn5iEJywn8J+YgScsJ/CfmIYnLCfwn5iFJywn8J+koycsJ/CfmIInLCfwn5mCJywn8J+YiScsJ/CfmIonLCfwn6WwJywn8J+YjScsJ/CfmJgnLCfwn5iLJywn8J+YmycsJ/CfmJwnLCfwn6SUJywn8J+YjycsJ/CfmYQnLCfwn5isJywn8J+YtCcsJ/CfpK8nXVxuICB9LFxuICB7XG4gICAga2V5OiAnZ2VzdHVyZXMnLCBsYWJlbDogJ0dlc3R1cmVzJywgaWNvbjogJ/CfkYsnLFxuICAgIGVtb2ppczogWyfwn5GLJywn4pyLJywn8J+RjCcsJ+KcjCcsJ/CfpJ4nLCfwn6SZJywn8J+RjScsJ/CfkY4nLCfwn5GPJywn8J+ZjCcsJ/CfpJ0nLCfwn5mPJ11cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYXJ0cycsIGxhYmVsOiAnSGVhcnRzJywgaWNvbjogJ+KdpO+4jycsXG4gICAgZW1vamlzOiBbJ+KdpO+4jycsJ/Cfp6EnLCfwn5KbJywn8J+SmicsJ/CfkpknLCfwn5KcJywn8J+WpCcsJ/CfkpQnLCfwn5KVJywn8J+SliddXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdvYmplY3RzJywgbGFiZWw6ICdPYmplY3RzJywgaWNvbjogJ+KtkCcsXG4gICAgZW1vamlzOiBbJ+KtkCcsJ/CflKUnLCfinKgnLCfwn46JJywn8J+PhicsJ/Cfkq8nLCfinIUnLCfinYwnLCfimqEnLCfwn5KhJywn8J+UlCcsJ/CflJcnXVxuICB9LFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnemVuLWNvbW1lbnQtdGV4dGFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtY29tbWVudC10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3plbmR1LWNvbW1lbnQtdGV4dGFyZWEuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVDb21tZW50VGV4dGFyZWFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG5cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnRW50ZXIgYSBjb21tZW50Li4uJztcblxuICBASW5wdXQoKSByb3dzID0gNDtcblxuICBASW5wdXQoKSBmaWxlVHlwZXMgPSAnKi8qJztcblxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGFkZENvbW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGV4dDogc3RyaW5nOyBmaWxlczogRmlsZVtdIH0+KCk7XG5cbiAgQE91dHB1dCgpIGZpbGVzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xuXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRleHQ6IHN0cmluZzsgZmlsZXM6IEZpbGVbXSB9PigpO1xuXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZWRpdGluZyA9IGZhbHNlO1xuICBlbW9qaVBpY2tlck9wZW4gPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgZW1vamlDYXRlZ29yaWVzID0gRU1PSklfQ0FURUdPUklFUztcbiAgYWN0aXZlRW1vamlDYXRlZ29yeSA9IEVNT0pJX0NBVEVHT1JJRVNbMF0ua2V5O1xuICBhdHRhY2htZW50czogQ29tbWVudEF0dGFjaG1lbnRbXSA9IFtdO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVtb2ppUGlja2VyT3BlbikgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuemVuLWVtb2ppLXBpY2tlcicpICYmICF0YXJnZXQuY2xvc2VzdCgnLnplbi1jb21tZW50LXRleHRhcmVhX19pY29uLWJ0blt0aXRsZT1cIkVtb2ppXCJdJykpIHtcbiAgICAgIHRoaXMuZW1vamlQaWNrZXJPcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5lZGl0aW5nID0gdmFsdWUubGVuZ3RoID4gMCB8fCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub25BZGRDb21tZW50KCk7XG4gICAgfVxuICB9XG5cbiAgb25BZGRDb21tZW50KCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcbiAgICBpZiAodGhpcy52YWx1ZS50cmltKCkgfHwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWRkQ29tbWVudC5lbWl0KHsgdGV4dDogdGhpcy52YWx1ZSwgZmlsZXM6IHRoaXMuYXR0YWNobWVudHMubWFwKGEgPT4gYS5maWxlKSB9KTtcbiAgICB9XG4gIH1cblxuICBvblNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnZhbHVlLnRyaW0oKSB8fCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zYXZlLmVtaXQoeyB0ZXh0OiB0aGlzLnZhbHVlLCBmaWxlczogdGhpcy5hdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICB0aGlzLmZpbGVzQ2hhbmdlZC5lbWl0KFtdKTtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgIHRoaXMuZmlsZXNDaGFuZ2VkLmVtaXQoW10pO1xuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIHRvZ2dsZUVtb2ppUGlja2VyKCkge1xuICAgIHRoaXMuZW1vamlQaWNrZXJPcGVuID0gIXRoaXMuZW1vamlQaWNrZXJPcGVuO1xuICB9XG5cbiAgc2VsZWN0RW1vamkoZW1vamk6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgKz0gZW1vamk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5lbW9qaVBpY2tlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHNldEVtb2ppQ2F0ZWdvcnkoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZUVtb2ppQ2F0ZWdvcnkgPSBrZXk7XG4gIH1cblxuICBnZXQgYWN0aXZlRW1vamlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjYXQgPSB0aGlzLmVtb2ppQ2F0ZWdvcmllcy5maW5kKGMgPT4gYy5rZXkgPT09IHRoaXMuYWN0aXZlRW1vamlDYXRlZ29yeSk7XG4gICAgcmV0dXJuIGNhdCA/IGNhdC5lbW9qaXMgOiBbXTtcbiAgfVxuXG4gIG9uRmlsZUlucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaWYgKCFpbnB1dC5maWxlcz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0LmZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbaV07XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzLnB1c2goe1xuICAgICAgICBmaWxlLFxuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIHNpemU6IHRoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSxcbiAgICAgICAgcHJvZ3Jlc3M6IDEwMCxcbiAgICAgICAgY29tcGxldGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZmlsZXNDaGFuZ2VkLmVtaXQodGhpcy5hdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpKTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICB9XG5cbiAgcmVtb3ZlQXR0YWNobWVudChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMuZmlsZXNDaGFuZ2VkLmVtaXQodGhpcy5hdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpKTtcbiAgICBpZiAoIXRoaXMuYXR0YWNobWVudHMubGVuZ3RoICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlSWNvbihuYW1lOiBzdHJpbmcpOiAnZG9jdW1lbnQnIHwgJ3ZpZGVvJyB8ICdtaXNjJyB7XG4gICAgY29uc3QgZXh0ID0gbmFtZS5zcGxpdCgnLicpLnBvcCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGlmIChbJ3BkZicsICdkb2MnLCAnZG9jeCcsICd0eHQnLCAneGxzJywgJ3hsc3gnLCAnY3N2JywgJ3BwdCcsICdwcHR4J10uaW5jbHVkZXMoZXh0KSkgcmV0dXJuICdkb2N1bWVudCc7XG4gICAgaWYgKFsnbXA0JywgJ21vdicsICdhdmknLCAnbWt2JywgJ3dlYm0nLCAnZmx2J10uaW5jbHVkZXMoZXh0KSkgcmV0dXJuICd2aWRlbyc7XG4gICAgcmV0dXJuICdtaXNjJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkgcmV0dXJuIGJ5dGVzICsgJyBCJztcbiAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMCkgKyAnIEtCJztcbiAgICByZXR1cm4gKGJ5dGVzIC8gKDEwMjQgKiAxMDI0KSkudG9GaXhlZCgxKSArICcgTUInO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFcIiBbY2xhc3MuemVuLWNvbW1lbnQtdGV4dGFyZWEtLWxvYWRpbmddPVwibG9hZGluZ1wiPlxuICA8IS0tIExhYmVsIC0tPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2xhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuXG4gIDwhLS0gTWFpbiBib3ggKHRvcDogYXR0YWNobWVudHMgKyB0ZXh0YXJlYSwgYm90dG9tOiB0b29sYmFyKSAtLT5cbiAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19pbnB1dC13cmFwcGVyXCI+XG4gICAgPCEtLSBBdHRhY2htZW50cyBpbnNpZGUgdGhlIHRleHRhcmVhIGFyZWEgLS0+XG4gICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19hdHRhY2htZW50c1wiICpuZ0lmPVwiYXR0YWNobWVudHMubGVuZ3RoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiemVuLWF0dGFjaG1lbnRcIlxuICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0IG9mIGF0dGFjaG1lbnRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tYXR0YWNobWVudF9fY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tYXR0YWNobWVudF9faWNvblwiIFtuZ1N3aXRjaF09XCJnZXRGaWxlSWNvbihhdHQubmFtZSlcIj5cbiAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidkb2N1bWVudCdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgMkg2QzUuNDY5NTcgMiA0Ljk2MDg2IDIuMjEwNzEgNC41ODU3OSAyLjU4NTc5QzQuMjEwNzEgMi45NjA4NiA0IDMuNDY5NTcgNCA0VjIwQzQgMjAuNTMwNCA0LjIxMDcxIDIxLjAzOTEgNC41ODU3OSAyMS40MTQyQzQuOTYwODYgMjEuNzg5MyA1LjQ2OTU3IDIyIDYgMjJIMThDMTguNTMwNCAyMiAxOS4wMzkxIDIxLjc4OTMgMTkuNDE0MiAyMS40MTQyQzE5Ljc4OTMgMjEuMDM5MSAyMCAyMC41MzA0IDIwIDIwVjhMMTQgMlpcIiBzdHJva2U9XCIjMTM2QUI2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjE0LDIgMTQsOCAyMCw4XCIgc3Ryb2tlPVwiIzEzNkFCNlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIid2aWRlbydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjJcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiByeD1cIjIuMThcIiByeT1cIjIuMThcIiBzdHJva2U9XCIjMTM2QUI2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPGxpbmUgeDE9XCI3XCIgeTE9XCIyXCIgeDI9XCI3XCIgeTI9XCIyMlwiIHN0cm9rZT1cIiMxMzZBQjZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8bGluZSB4MT1cIjE3XCIgeTE9XCIyXCIgeDI9XCIxN1wiIHkyPVwiMjJcIiBzdHJva2U9XCIjMTM2QUI2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPGxpbmUgeDE9XCIyXCIgeTE9XCIxMlwiIHgyPVwiMjJcIiB5Mj1cIjEyXCIgc3Ryb2tlPVwiIzEzNkFCNlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDxzdmcgKm5nU3dpdGNoQ2FzZT1cIidtaXNjJ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjE2LDE2IDEyLDEyIDgsMTZcIiBzdHJva2U9XCIjMTM2QUI2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxMlwiIHkxPVwiMTJcIiB4Mj1cIjEyXCIgeTI9XCIyMVwiIHN0cm9rZT1cIiMxMzZBQjZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIwLjM5IDE4LjM5QTUgNSAwIDAgMCAxOCA5aC0xLjI2QTggOCAwIDEgMCAzIDE2LjNcIiBzdHJva2U9XCIjMTM2QUI2XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tYXR0YWNobWVudF9faW5mb1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInplbi1hdHRhY2htZW50X19uYW1lXCI+e3sgYXR0Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tYXR0YWNobWVudF9fc2l6ZVwiPnt7IGF0dC5zaXplIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInplbi1hdHRhY2htZW50X19yZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlQXR0YWNobWVudChpKVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjMsNiA1LDYgMjEsNlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xOSA2VjIwQzE5IDIwLjUzMDQgMTguNzg5MyAyMS4wMzkxIDE4LjQxNDIgMjEuNDE0MkMxOC4wMzkxIDIxLjc4OTMgMTcuNTMwNCAyMiAxNyAyMkg3QzYuNDY5NTcgMjIgNS45NjA4NiAyMS43ODkzIDUuNTg1NzkgMjEuNDE0MkM1LjIxMDcxIDIxLjAzOTEgNSAyMC41MzA0IDUgMjBWNk04IDZWNEM4IDMuNDY5NTcgOC4yMTA3MSAyLjk2MDg2IDguNTg1NzkgMi41ODU3OUM4Ljk2MDg2IDIuMjEwNzEgOS40Njk1NyAyIDEwIDJIMTRDMTQuNTMwNCAyIDE1LjAzOTEgMi4yMTA3MSAxNS40MTQyIDIuNTg1NzlDMTUuNzg5MyAyLjk2MDg2IDE2IDMuNDY5NTcgMTYgNFY2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgIDx0ZXh0YXJlYSBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19pbnB1dFwiXG4gICAgICAgICAgICAgIFtyb3dzXT1cInJvd3NcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIj48L3RleHRhcmVhPlxuICA8L2Rpdj5cblxuICA8IS0tIFRvb2xiYXIgKGJvdHRvbSBwYXJ0IHdpdGggcm91bmRlZCBib3R0b20gY29ybmVycykgLS0+XG4gIDxkaXYgY2xhc3M9XCJ6ZW4tY29tbWVudC10ZXh0YXJlYV9fdG9vbGJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ6ZW4tY29tbWVudC10ZXh0YXJlYV9fdG9vbGJhci1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX3Rvb2xiYXItY29udGVudFwiPlxuICAgICAgPCEtLSBJY29uIGJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX3Rvb2xiYXItaWNvbnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19lbW9qaS13cmFwcGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2ljb24tYnRuXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy56ZW4tY29tbWVudC10ZXh0YXJlYV9faWNvbi1idG4tLWFjdGl2ZV09XCJlbW9qaVBpY2tlck9wZW5cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFbW9qaVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRW1vamlQaWNrZXIoKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDE0QzggMTQgOS41IDE2IDEyIDE2QzE0LjUgMTYgMTYgMTQgMTYgMTRcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgPGxpbmUgeDE9XCI5XCIgeTE9XCI5XCIgeDI9XCI5LjAxXCIgeTI9XCI5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDxsaW5lIHgxPVwiMTVcIiB5MT1cIjlcIiB4Mj1cIjE1LjAxXCIgeTI9XCI5XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDwhLS0gRW1vamkgcGlja2VyIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tZW1vamktcGlja2VyXCIgKm5nSWY9XCJlbW9qaVBpY2tlck9wZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6ZW4tZW1vamktcGlja2VyX19ncmlkXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ6ZW4tZW1vamktcGlja2VyX19lbW9qaVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVtb2ppIG9mIGFjdGl2ZUVtb2ppc1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEVtb2ppKGVtb2ppKVwiPlxuICAgICAgICAgICAgICAgIHt7IGVtb2ppIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiemVuLWVtb2ppLXBpY2tlcl9fY2F0ZWdvcmllc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiemVuLWVtb2ppLXBpY2tlcl9fY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy56ZW4tZW1vamktcGlja2VyX19jYXRlZ29yeS0tYWN0aXZlXT1cImNhdC5rZXkgPT09IGFjdGl2ZUVtb2ppQ2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjYXQgb2YgZW1vamlDYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RW1vamlDYXRlZ29yeShjYXQua2V5KVwiPlxuICAgICAgICAgICAgICAgIHt7IGNhdC5pY29uIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ6ZW4tY29tbWVudC10ZXh0YXJlYV9faWNvbi1idG5cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIGZpbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0yMS40NCAxMS4wNUwxMi4yNSAyMC4yNEMxMS4xMjQyIDIxLjM2NTggOS41OTcyMyAyMS45OTgzIDguMDA1MDUgMjEuOTk4M0M2LjQxMjg2IDIxLjk5ODMgNC44ODU4OSAyMS4zNjU4IDMuNzYwMDUgMjAuMjRDMi42MzQyIDE5LjExNDIgMi4wMDE3MSAxNy41ODcyIDIuMDAxNzEgMTUuOTk1QzIuMDAxNzEgMTQuNDAyOSAyLjYzNDIgMTIuODc1OSAzLjc2MDA1IDExLjc1TDEyLjk1IDIuNTZDMTMuNzAwNiAxLjgwOTQ0IDE0LjcxODYgMS4zODc3IDE1Ljc4IDEuMzg3N0MxNi44NDE1IDEuMzg3NyAxNy44NTk1IDEuODA5NDQgMTguNjEgMi41NkMxOS4zNjA2IDMuMzEwNTcgMTkuNzgyMyA0LjMyODYzIDE5Ljc4MjMgNS4zOUMxOS43ODIzIDYuNDUxMzggMTkuMzYwNiA3LjQ2OTQ0IDE4LjYxIDguMjJMOS40MTAwNSAxNy40MUM5LjAzNDc2IDE3Ljc4NTMgOC41MjU3MyAxNy45OTYxIDcuOTk1MDUgMTcuOTk2MUM3LjQ2NDM2IDE3Ljk5NjEgNi45NTUzMyAxNy43ODUzIDYuNTgwMDUgMTcuNDFDNi4yMDQ3NiAxNy4wMzQ3IDUuOTkzODkgMTYuNTI1NyA1Ljk5Mzg5IDE1Ljk5NUM1Ljk5Mzg5IDE1LjQ2NDQgNi4yMDQ3NiAxNC45NTUzIDYuNTgwMDUgMTQuNThMMTUuMDcgNi4xXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiAjZmlsZUlucHV0IFthY2NlcHRdPVwiZmlsZVR5cGVzXCIgbXVsdGlwbGUgaGlkZGVuIChjaGFuZ2UpPVwib25GaWxlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSaWdodCBzaWRlIGFjdGlvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2FjdGlvbnNcIiAqbmdJZj1cIiFlZGl0aW5nXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2hpbnRcIj5QcmVzcyBlbnRlcjwvc3Bhbj5cbiAgICAgICAgPHN2ZyBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19yZXR1cm4taWNvblwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTMuMzMzMzcgMTIuNUw2LjY2NjcxIDE1LjgzMzNNMy4zMzMzNyAxMi41TDYuNjY2NzEgOS4xNjY2N00zLjMzMzM3IDEyLjVIMTMuMzMzNEMxNC4yMTc1IDEyLjUgMTUuMDY1MyAxMi4xNDg4IDE1LjY5MDQgMTEuNTIzN0MxNi4zMTU1IDEwLjg5ODYgMTYuNjY2NyAxMC4wNTA3IDE2LjY2NjcgOS4xNjY2N1Y0LjE2NjY3XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19oaW50XCI+dG88L3NwYW4+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2FkZC1idG5cIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChjbGljayk9XCJvbkFkZENvbW1lbnQoKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX3NwaW5uZXJcIiAqbmdJZj1cImxvYWRpbmdcIj48L3NwYW4+XG4gICAgICAgICAge3sgbG9hZGluZyA/ICdTZW5kaW5nLi4uJyA6ICdBZGQgQ29tbWVudCcgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19hY3Rpb25zXCIgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiemVuLWNvbW1lbnQtdGV4dGFyZWFfX2NhbmNlbC1idG5cIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInplbi1jb21tZW50LXRleHRhcmVhX19zYXZlLWJ0blwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ6ZW4tY29tbWVudC10ZXh0YXJlYV9fc3Bpbm5lclwiICpuZ0lmPVwibG9hZGluZ1wiPjwvc3Bhbj5cbiAgICAgICAgICB7eyBsb2FkaW5nID8gJ1NhdmluZy4uLicgOiAnU2F2ZScgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItZHJvcGRvd24udHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvZGF0ZS1waWNrZXItZHJvcGRvd24vZGF0ZS1waWNrZXItZHJvcGRvd24udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIERhdGVQaWNrZXJEcm9wZG93blR5cGUgPSAnc2luZ2xlJyB8ICdyYW5nZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVBpY2tlclByZXNldCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdldFJhbmdlOiAoKSA9PiB7IHN0YXJ0OiBEYXRlOyBlbmQ6IERhdGUgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2VWYWx1ZSB7XG4gIHN0YXJ0OiBEYXRlIHwgbnVsbDtcbiAgZW5kOiBEYXRlIHwgbnVsbDtcbn1cbiJdfQ==
|