@acorex/platform 18.1.2 → 18.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +2 -1
- package/esm2022/layout/builder/lib/builder/widget.types.mjs +5 -2
- package/esm2022/layout/designer/lib/designer/index.mjs +5 -4
- package/esm2022/layout/entity/lib/entity.module.mjs +4 -3
- package/esm2022/layout/entity/lib/widgets/widget-selector/index.mjs +4 -0
- package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget-edit.component.mjs +130 -0
- package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget-view.component.mjs +18 -0
- package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget.config.mjs +19 -0
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +2 -2
- package/esm2022/themes/default/lib/layouts/entity-layouts/index.mjs +1 -2
- package/esm2022/themes/shared/acorex-platform-themes-shared.mjs +5 -0
- package/esm2022/themes/shared/index.mjs +6 -0
- package/esm2022/themes/shared/lib/comments/comment-list-view.component.mjs +397 -0
- package/esm2022/themes/{default/lib/layouts/entity-layouts/entity-master-single-view → shared/lib}/comments/comment-lookup-popup.component.mjs +1 -1
- package/esm2022/themes/shared/lib/comments/comments.service.mjs +3 -0
- package/esm2022/themes/shared/lib/comments/comments.type.mjs +2 -0
- package/esm2022/themes/shared/lib/shared.module.mjs +16 -0
- package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +24 -8
- package/fesm2022/acorex-platform-layout-builder.mjs +5 -1
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +190 -100
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +157 -5
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-LyEomIA6.mjs → acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs} +3 -3
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-LyEomIA6.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-CKRwvJTp.mjs → acorex-platform-themes-default-entity-master-list-view.component-fZ6QEYcd.mjs} +8 -8
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-CKRwvJTp.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-fZ6QEYcd.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CMRfspMB.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs} +3 -3
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CMRfspMB.mjs.map → acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bnrabotu.mjs +145 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bnrabotu.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +11 -14
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +469 -0
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -0
- package/fesm2022/acorex-platform-widgets.mjs +23 -7
- package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
- package/layout/builder/lib/builder/widget.types.d.ts +1 -0
- package/layout/designer/lib/designer/index.d.ts +4 -3
- package/layout/entity/lib/widgets/widget-selector/index.d.ts +3 -0
- package/layout/entity/lib/widgets/widget-selector/widget-selector-widget-edit.component.d.ts +25 -0
- package/layout/entity/lib/widgets/widget-selector/widget-selector-widget-view.component.d.ts +6 -0
- package/layout/entity/lib/widgets/widget-selector/widget-selector-widget.config.d.ts +7 -0
- package/package.json +23 -17
- package/themes/default/lib/layouts/entity-layouts/index.d.ts +0 -1
- package/themes/shared/README.md +4 -0
- package/themes/shared/index.d.ts +5 -0
- package/themes/{default/lib/layouts/entity-layouts/entity-master-single-view → shared/lib}/comments/comment-list-view.component.d.ts +21 -16
- package/themes/shared/lib/shared.module.d.ts +6 -0
- package/widgets/lib/widgets/editors/contact/contact-widget-edit.component.d.ts +3 -1
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comment-list-view.component.mjs +0 -284
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comments.service.mjs +0 -3
- package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/comments/comments.type.mjs +0 -2
- package/fesm2022/acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs +0 -100
- package/fesm2022/acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DhcKSyrX.mjs +0 -457
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DhcKSyrX.mjs.map +0 -1
- /package/themes/{default/lib/layouts/entity-layouts/entity-master-single-view → shared/lib}/comments/comment-lookup-popup.component.d.ts +0 -0
- /package/themes/{default/lib/layouts/entity-layouts/entity-master-single-view → shared/lib}/comments/comments.service.d.ts +0 -0
- /package/themes/{default/lib/layouts/entity-layouts/entity-master-single-view → shared/lib}/comments/comments.type.d.ts +0 -0
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import { AXCommentModule } from '@acorex/components/comment';
|
|
2
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
3
|
-
import { AXWysiwygModule } from '@acorex/components/wysiwyg';
|
|
4
|
-
import { CommonModule } from '@angular/common';
|
|
5
|
-
import { ChangeDetectionStrategy, Component, computed, inject, signal, viewChild } from '@angular/core';
|
|
6
|
-
import { FormsModule } from '@angular/forms';
|
|
7
|
-
import { ActivatedRoute, RouterModule } from '@angular/router';
|
|
8
|
-
import { AXAvatarModule } from '@acorex/components/avatar';
|
|
9
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
10
|
-
import { AXDialogService } from '@acorex/components/dialog';
|
|
11
|
-
import { AXDropdownModule } from '@acorex/components/dropdown';
|
|
12
|
-
import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
|
|
13
|
-
import { AXFormModule } from '@acorex/components/form';
|
|
14
|
-
import { AXImageModule } from '@acorex/components/image';
|
|
15
|
-
import { AXLabelModule } from '@acorex/components/label';
|
|
16
|
-
import { AXLoadingModule } from '@acorex/components/loading';
|
|
17
|
-
import { AXPopupService } from '@acorex/components/popup';
|
|
18
|
-
import { AXSelectBoxModule } from '@acorex/components/select-box';
|
|
19
|
-
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
20
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
21
|
-
import { AXPHtmlUtils } from '@acorex/platform/core';
|
|
22
|
-
import { AXPCommentLookupPopup } from './comment-lookup-popup.component';
|
|
23
|
-
import { AXPCommentService } from './comments.service';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "@angular/forms";
|
|
26
|
-
import * as i2 from "@acorex/components/decorators";
|
|
27
|
-
import * as i3 from "@acorex/components/comment";
|
|
28
|
-
import * as i4 from "@acorex/components/wysiwyg";
|
|
29
|
-
import * as i5 from "@acorex/components/button";
|
|
30
|
-
import * as i6 from "@acorex/components/avatar";
|
|
31
|
-
import * as i7 from "@acorex/components/image";
|
|
32
|
-
import * as i8 from "@acorex/components/form";
|
|
33
|
-
import * as i9 from "@acorex/components/loading";
|
|
34
|
-
import * as i10 from "@acorex/components/dropdown-button";
|
|
35
|
-
import * as i11 from "@acorex/components/dropdown";
|
|
36
|
-
export class AXPCommentListViewComponent {
|
|
37
|
-
constructor() {
|
|
38
|
-
this.commentContent = signal('');
|
|
39
|
-
this.hasCooldown = signal(false);
|
|
40
|
-
this.isSubmitting = signal(false);
|
|
41
|
-
this.isReplyingMode = signal(false);
|
|
42
|
-
this.isEditingMode = signal(false);
|
|
43
|
-
this.failedImageIds = signal([]);
|
|
44
|
-
this.activeReplyComment = signal(undefined);
|
|
45
|
-
this.activeEditComment = signal(undefined);
|
|
46
|
-
this.wysiwygEditor = viewChild.required('w');
|
|
47
|
-
this.commentService = inject(AXPCommentService);
|
|
48
|
-
this.route = inject(ActivatedRoute);
|
|
49
|
-
this.popupService = inject(AXPopupService);
|
|
50
|
-
this.toastService = inject(AXToastService);
|
|
51
|
-
this.dialogService = inject(AXDialogService);
|
|
52
|
-
this.htmlUtils = inject(AXPHtmlUtils);
|
|
53
|
-
this.routeParams = this.route.snapshot;
|
|
54
|
-
this.payload = computed(() => ({
|
|
55
|
-
roomType: 'default',
|
|
56
|
-
entityId: this.routeParams.params?.['module'] + '.' + this.routeParams.params?.['entity'],
|
|
57
|
-
instanceId: this.routeParams.params?.['id'],
|
|
58
|
-
}));
|
|
59
|
-
this.comments = signal([]);
|
|
60
|
-
this.wysiwygOptions = signal({
|
|
61
|
-
look: 'none',
|
|
62
|
-
});
|
|
63
|
-
this.avatarConfig = signal({
|
|
64
|
-
color: 'primary',
|
|
65
|
-
look: 'rounded',
|
|
66
|
-
type: 'solid', // 'image' | 'text' | 'icon' | 'default'
|
|
67
|
-
});
|
|
68
|
-
this.validateContent = (content) => {
|
|
69
|
-
let isValid = true;
|
|
70
|
-
if (!content || content === '<p><br></p>') {
|
|
71
|
-
isValid = false;
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
rule: 'callback',
|
|
75
|
-
result: isValid,
|
|
76
|
-
message: isValid ? '' : 'Please fill the content',
|
|
77
|
-
value: content,
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
ngOnInit() {
|
|
82
|
-
this.loadComments();
|
|
83
|
-
}
|
|
84
|
-
sanitizeHtml(htmlContent) {
|
|
85
|
-
return this.htmlUtils.getSafeHTMLfromHTML(htmlContent);
|
|
86
|
-
}
|
|
87
|
-
handleImageError(imageId) {
|
|
88
|
-
this.failedImageIds.update((ids) => [...ids, imageId]);
|
|
89
|
-
}
|
|
90
|
-
checkImageExists(imageId) {
|
|
91
|
-
return !this.failedImageIds().includes(imageId);
|
|
92
|
-
}
|
|
93
|
-
extractInitials(name) {
|
|
94
|
-
const words = name.split(' ');
|
|
95
|
-
const initials = words.map((word) => word.charAt(0).toUpperCase());
|
|
96
|
-
return initials.join('');
|
|
97
|
-
}
|
|
98
|
-
async loadComments() {
|
|
99
|
-
const response = await this.commentService.get(this.payload());
|
|
100
|
-
this.comments.set(response.items);
|
|
101
|
-
}
|
|
102
|
-
async initiateEditComment(comment) {
|
|
103
|
-
this.isReplyingMode.set(false);
|
|
104
|
-
this.activeReplyComment.set(undefined);
|
|
105
|
-
this.isEditingMode.set(true);
|
|
106
|
-
this.activeEditComment.set(comment);
|
|
107
|
-
this.commentContent.set(comment.content);
|
|
108
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = comment.content;
|
|
109
|
-
this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
110
|
-
}
|
|
111
|
-
async initiateReplyComment(comment) {
|
|
112
|
-
this.isEditingMode.set(false);
|
|
113
|
-
this.activeEditComment.set(undefined);
|
|
114
|
-
this.isReplyingMode.set(true);
|
|
115
|
-
this.activeReplyComment.set(comment);
|
|
116
|
-
this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
117
|
-
}
|
|
118
|
-
async deleteComment(comment) {
|
|
119
|
-
const dialog = this.dialogService.open({
|
|
120
|
-
icon: 'fa-regular fa-warning',
|
|
121
|
-
content: 'Are you sure you want to delete this comment?',
|
|
122
|
-
title: 'Delete Comment',
|
|
123
|
-
type: 'danger',
|
|
124
|
-
orientation: 'horizontal',
|
|
125
|
-
buttons: [
|
|
126
|
-
{
|
|
127
|
-
text: 'Delete',
|
|
128
|
-
color: 'danger',
|
|
129
|
-
onClick: async (e) => {
|
|
130
|
-
e.handled = true;
|
|
131
|
-
e.source.text = 'Deleting...';
|
|
132
|
-
e.source.disabled = true;
|
|
133
|
-
e.source.loading = true;
|
|
134
|
-
try {
|
|
135
|
-
await this.commentService.delete({ id: comment.id });
|
|
136
|
-
this.removeCommentById(comment.id);
|
|
137
|
-
this.toastService.show({
|
|
138
|
-
content: 'Comment deleted successfully.',
|
|
139
|
-
color: 'success',
|
|
140
|
-
location: 'bottom-center',
|
|
141
|
-
closeButton: true,
|
|
142
|
-
timeOut: 3000,
|
|
143
|
-
timeOutProgress: true,
|
|
144
|
-
});
|
|
145
|
-
dialog.close();
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
this.toastService.show({
|
|
149
|
-
content: typeof error === 'string' ? error : 'Failed to delete comment!',
|
|
150
|
-
color: 'danger',
|
|
151
|
-
location: 'bottom-center',
|
|
152
|
-
closeButton: true,
|
|
153
|
-
timeOut: 3000,
|
|
154
|
-
timeOutProgress: true,
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
text: 'Cancel',
|
|
161
|
-
color: 'ghost',
|
|
162
|
-
autofocus: true,
|
|
163
|
-
onClick: (e) => {
|
|
164
|
-
dialog.close();
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
],
|
|
168
|
-
closeButton: false,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
resetReplyEditState() {
|
|
172
|
-
this.isEditingMode.set(false);
|
|
173
|
-
this.activeEditComment.set(undefined);
|
|
174
|
-
this.isReplyingMode.set(false);
|
|
175
|
-
this.activeReplyComment.set(undefined);
|
|
176
|
-
}
|
|
177
|
-
async toggleLikeComment(comment) {
|
|
178
|
-
this.updateLikeStatus(comment.id);
|
|
179
|
-
const payload = {
|
|
180
|
-
messageId: comment.id,
|
|
181
|
-
type: 'like',
|
|
182
|
-
};
|
|
183
|
-
try {
|
|
184
|
-
await this.commentService.like(payload);
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
this.updateLikeStatus(comment.id);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
updateLikeStatus(commentId) {
|
|
191
|
-
this.comments.update((commentsList) => {
|
|
192
|
-
return commentsList.map((comment) => comment.id === commentId
|
|
193
|
-
? {
|
|
194
|
-
...comment,
|
|
195
|
-
isLiked: !comment.isLiked,
|
|
196
|
-
reactionsCount: comment.isLiked ? --comment.reactionsCount : ++comment.reactionsCount,
|
|
197
|
-
}
|
|
198
|
-
: comment);
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
removeCommentById(commentId) {
|
|
202
|
-
this.comments.update((commentsList) => commentsList.filter((comment) => comment.id !== commentId));
|
|
203
|
-
}
|
|
204
|
-
async submitPrivateComment() {
|
|
205
|
-
if (!this.validateContent(this.commentContent()).result) {
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
const popupConfig = {
|
|
209
|
-
header: true,
|
|
210
|
-
size: 'md',
|
|
211
|
-
draggable: true,
|
|
212
|
-
hasBackdrop: true,
|
|
213
|
-
closeButton: true,
|
|
214
|
-
closeOnBackdropClick: false,
|
|
215
|
-
};
|
|
216
|
-
const popup = await this.popupService.open(AXPCommentLookupPopup, popupConfig);
|
|
217
|
-
const payload = {
|
|
218
|
-
...this.payload(),
|
|
219
|
-
content: this.commentContent(),
|
|
220
|
-
contentType: 'text',
|
|
221
|
-
isPrivate: false,
|
|
222
|
-
replyId: this.activeReplyComment()?.id,
|
|
223
|
-
members: [popup.data?.data?.lookup],
|
|
224
|
-
};
|
|
225
|
-
this.isSubmitting.set(true);
|
|
226
|
-
this.hasCooldown.set(true);
|
|
227
|
-
await this.commentService.post(payload);
|
|
228
|
-
const response = await this.commentService.get(this.payload());
|
|
229
|
-
this.comments.set(response.items);
|
|
230
|
-
this.commentContent.set('');
|
|
231
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = '';
|
|
232
|
-
this.isSubmitting.set(false);
|
|
233
|
-
setTimeout(() => {
|
|
234
|
-
this.hasCooldown.set(false);
|
|
235
|
-
}, 1000);
|
|
236
|
-
}
|
|
237
|
-
async submitComment() {
|
|
238
|
-
if (!this.validateContent(this.commentContent()).result) {
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
const payload = {
|
|
242
|
-
...this.payload(),
|
|
243
|
-
content: this.commentContent(),
|
|
244
|
-
contentType: 'text',
|
|
245
|
-
isPrivate: false,
|
|
246
|
-
replyId: this.activeReplyComment()?.id,
|
|
247
|
-
};
|
|
248
|
-
this.isSubmitting.set(true);
|
|
249
|
-
this.hasCooldown.set(true);
|
|
250
|
-
await this.commentService.post(payload);
|
|
251
|
-
const response = await this.commentService.get(this.payload());
|
|
252
|
-
this.comments.set(response.items);
|
|
253
|
-
this.commentContent.set('');
|
|
254
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = '';
|
|
255
|
-
this.isSubmitting.set(false);
|
|
256
|
-
setTimeout(() => {
|
|
257
|
-
this.hasCooldown.set(false);
|
|
258
|
-
}, 1000);
|
|
259
|
-
}
|
|
260
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPCommentListViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
261
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPCommentListViewComponent, isStandalone: true, selector: "axp-comment-list-view", viewQueries: [{ propertyName: "wysiwygEditor", first: true, predicate: ["w"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-mt-2\">\n <ax-comment-view class=\"ax-bg-surface\">\n @for(comment of comments(); track comment.id){\n <ax-comment-item>\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(checkImageExists(comment.id) && comment.user.picture){\n <ax-image (onError)=\"handleImageError(comment.id)\" [src]=\"comment.user.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(comment.user.firstName + ' ' + comment.user.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ comment.user.firstName + ' ' + comment.user.lastName }}</ax-title>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"initiateEditComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLikeComment(comment)\" [liked]=\"comment.isLiked\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"initiateReplyComment(comment)\"></ax-comment-reply-text>\n @for(reply of comment.replies; track reply.id){\n <ax-comment-item>\n @if(checkImageExists(reply.id) && reply?.user?.picture){\n <ax-image (onError)=\"handleImageError(reply.id)\" [src]=\"reply?.user?.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(reply?.user?.firstName + ' ' + reply?.user?.lastName)\n }}</span>\n </ax-text>\n }\n <ax-title>{{ (reply?.user?.firstName ?? '') + ' ' + (reply?.user?.lastName ?? '') }}</ax-title>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLikeComment(reply)\" [liked]=\"reply.isLiked\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"initiateReplyComment(reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n } @empty{ }\n </ax-comment-view>\n\n <ax-form>\n <ax-form-field>\n <div class=\"ax-border ax-overflow-hidden ax-rounded-lg\">\n @if(isReplyingMode() || isEditingMode()){\n <div\n class=\"ax-flex ax-justify-between ax-border-b ax-bg-on-surface ax-px-6 ax-py-4 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div class=\"ax-flex ax-justify-start ax-align-middle\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 ax-text-2xl ax-me-4\"\n ></i>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle\">\n <p class=\"ax-text-primary-500\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{\n isReplyingMode()\n ? activeReplyComment()?.user?.firstName + ' ' + activeReplyComment()?.user?.lastName\n : ''\n }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.content ?? '')\n : sanitizeHtml(activeEditComment()?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if(isSubmitting()){ <ax-loading></ax-loading> }\n <ax-button-item-list>\n <ax-button-item\n (click)=\"submitPrivateComment()\"\n text=\"Send Private ...\"\n name=\"private\"\n data=\"private\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n", styles: ["ax-wysiwyg-container .ax-error-message{padding-left:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXCommentModule }, { kind: "component", type: i3.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i3.AxCommentItemComponent, selector: "ax-comment-item" }, { kind: "component", type: i3.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["liked"] }, { kind: "component", type: i3.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i3.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i4.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "placeHolder"], outputs: ["onValueChanged"] }, { kind: "component", type: i4.AXWysiwygViewComponent, selector: "ax-wysiwyg-view", inputs: ["class"] }, { kind: "component", type: i4.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "component", type: i4.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i4.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i4.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i4.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i4.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i5.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i5.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXAvatarModule }, { kind: "component", type: i6.AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "look"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i7.AXImageComponent, selector: "ax-image", inputs: ["overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i8.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i8.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i8.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i9.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i10.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i11.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
262
|
-
}
|
|
263
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPCommentListViewComponent, decorators: [{
|
|
264
|
-
type: Component,
|
|
265
|
-
args: [{ selector: 'axp-comment-list-view', imports: [
|
|
266
|
-
FormsModule,
|
|
267
|
-
CommonModule,
|
|
268
|
-
RouterModule,
|
|
269
|
-
AXDecoratorModule,
|
|
270
|
-
AXCommentModule,
|
|
271
|
-
AXWysiwygModule,
|
|
272
|
-
AXButtonModule,
|
|
273
|
-
AXTextBoxModule,
|
|
274
|
-
AXLabelModule,
|
|
275
|
-
AXAvatarModule,
|
|
276
|
-
AXImageModule,
|
|
277
|
-
AXSelectBoxModule,
|
|
278
|
-
AXFormModule,
|
|
279
|
-
AXLoadingModule,
|
|
280
|
-
AXDropdownButtonModule,
|
|
281
|
-
AXDropdownModule,
|
|
282
|
-
], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-mt-2\">\n <ax-comment-view class=\"ax-bg-surface\">\n @for(comment of comments(); track comment.id){\n <ax-comment-item>\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(checkImageExists(comment.id) && comment.user.picture){\n <ax-image (onError)=\"handleImageError(comment.id)\" [src]=\"comment.user.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(comment.user.firstName + ' ' + comment.user.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ comment.user.firstName + ' ' + comment.user.lastName }}</ax-title>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"initiateEditComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLikeComment(comment)\" [liked]=\"comment.isLiked\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"initiateReplyComment(comment)\"></ax-comment-reply-text>\n @for(reply of comment.replies; track reply.id){\n <ax-comment-item>\n @if(checkImageExists(reply.id) && reply?.user?.picture){\n <ax-image (onError)=\"handleImageError(reply.id)\" [src]=\"reply?.user?.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(reply?.user?.firstName + ' ' + reply?.user?.lastName)\n }}</span>\n </ax-text>\n }\n <ax-title>{{ (reply?.user?.firstName ?? '') + ' ' + (reply?.user?.lastName ?? '') }}</ax-title>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLikeComment(reply)\" [liked]=\"reply.isLiked\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"initiateReplyComment(reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n } @empty{ }\n </ax-comment-view>\n\n <ax-form>\n <ax-form-field>\n <div class=\"ax-border ax-overflow-hidden ax-rounded-lg\">\n @if(isReplyingMode() || isEditingMode()){\n <div\n class=\"ax-flex ax-justify-between ax-border-b ax-bg-on-surface ax-px-6 ax-py-4 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div class=\"ax-flex ax-justify-start ax-align-middle\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 ax-text-2xl ax-me-4\"\n ></i>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle\">\n <p class=\"ax-text-primary-500\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{\n isReplyingMode()\n ? activeReplyComment()?.user?.firstName + ' ' + activeReplyComment()?.user?.lastName\n : ''\n }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.content ?? '')\n : sanitizeHtml(activeEditComment()?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if(isSubmitting()){ <ax-loading></ax-loading> }\n <ax-button-item-list>\n <ax-button-item\n (click)=\"submitPrivateComment()\"\n text=\"Send Private ...\"\n name=\"private\"\n data=\"private\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n", styles: ["ax-wysiwyg-container .ax-error-message{padding-left:.5rem}\n"] }]
|
|
283
|
-
}] });
|
|
284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1saXN0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci1zaW5nbGUtdmlldy9jb21tZW50cy9jb21tZW50LWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3RoZW1lcy9kZWZhdWx0L3NyYy9saWIvbGF5b3V0cy9lbnRpdHktbGF5b3V0cy9lbnRpdHktbWFzdGVyLXNpbmdsZS12aWV3L2NvbW1lbnRzL2NvbW1lbnQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQStCLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVB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cnQgeyBBWENvbW1lbnRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbWVudCc7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYV3lzaXd5Z0NvbnRhaW5lckNvbXBvbmVudCwgQVhXeXNpd3lnTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3d5c2l3eWcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBBWEF2YXRhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hdmF0YXInO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYU3R5bGVMb29rVHlwZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRHJvcGRvd25CdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IEFYRm9ybU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IEFYSW1hZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvaW1hZ2UnO1xuaW1wb3J0IHsgQVhMYWJlbE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sYWJlbCc7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFBvcHVwQ29uZmlnLCBBWFBvcHVwU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3B1cCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYVGV4dEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90ZXh0LWJveCc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWFBIdG1sVXRpbHMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQQ29tbWVudExvb2t1cFBvcHVwIH0gZnJvbSAnLi9jb21tZW50LWxvb2t1cC1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQQ29tbWVudFNlcnZpY2UgfSBmcm9tICcuL2NvbW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhQQ29tbWVudCwgQVhQTGlrZVJlcXVlc3QsIEFYUFBvc3RSZXF1ZXN0IH0gZnJvbSAnLi9jb21tZW50cy50eXBlJztcbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudC1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzZWxlY3RvcjogJ2F4cC1jb21tZW50LWxpc3QtdmlldycsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYQ29tbWVudE1vZHVsZSxcbiAgICBBWFd5c2l3eWdNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhUZXh0Qm94TW9kdWxlLFxuICAgIEFYTGFiZWxNb2R1bGUsXG4gICAgQVhBdmF0YXJNb2R1bGUsXG4gICAgQVhJbWFnZU1vZHVsZSxcbiAgICBBWFNlbGVjdEJveE1vZHVsZSxcbiAgICBBWEZvcm1Nb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bk1vZHVsZSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc3R5bGVzOiBgYXgtd3lzaXd5Zy1jb250YWluZXJ7XG4gICAgLmF4LWVycm9yLW1lc3NhZ2V7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICB9XG4gIH1gLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQVhQQ29tbWVudExpc3RWaWV3Q29tcG9uZW50IHtcbiAgY29tbWVudENvbnRlbnQgPSBzaWduYWwoJycpO1xuICBoYXNDb29sZG93biA9IHNpZ25hbChmYWxzZSk7XG4gIGlzU3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIGlzUmVwbHlpbmdNb2RlID0gc2lnbmFsKGZhbHNlKTtcbiAgaXNFZGl0aW5nTW9kZSA9IHNpZ25hbChmYWxzZSk7XG4gIGZhaWxlZEltYWdlSWRzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIGFjdGl2ZVJlcGx5Q29tbWVudCA9IHNpZ25hbDx1bmRlZmluZWQgfCBBWFBDb21tZW50Pih1bmRlZmluZWQpO1xuICBhY3RpdmVFZGl0Q29tbWVudCA9IHNpZ25hbDx1bmRlZmluZWQgfCBBWFBDb21tZW50Pih1bmRlZmluZWQpO1xuICB3eXNpd3lnRWRpdG9yID0gdmlld0NoaWxkLnJlcXVpcmVkPEFYV3lzaXd5Z0NvbnRhaW5lckNvbXBvbmVudD4oJ3cnKTtcblxuICBwcml2YXRlIGNvbW1lbnRTZXJ2aWNlID0gaW5qZWN0KEFYUENvbW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoQVhUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQVhEaWFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBodG1sVXRpbHMgPSBpbmplY3QoQVhQSHRtbFV0aWxzKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZVBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gIHByaXZhdGUgcGF5bG9hZCA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgcm9vbVR5cGU6ICdkZWZhdWx0JyxcbiAgICBlbnRpdHlJZDogdGhpcy5yb3V0ZVBhcmFtcy5wYXJhbXM/LlsnbW9kdWxlJ10gKyAnLicgKyB0aGlzLnJvdXRlUGFyYW1zLnBhcmFtcz8uWydlbnRpdHknXSxcbiAgICBpbnN0YW5jZUlkOiB0aGlzLnJvdXRlUGFyYW1zLnBhcmFtcz8uWydpZCddLFxuICB9KSk7XG5cbiAgcHJvdGVjdGVkIGNvbW1lbnRzID0gc2lnbmFsPEFYUENvbW1lbnRbXT4oW10pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZENvbW1lbnRzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgd3lzaXd5Z09wdGlvbnMgPSBzaWduYWw8e1xuICAgIGxvb2s6IEFYU3R5bGVMb29rVHlwZTtcbiAgfT4oe1xuICAgIGxvb2s6ICdub25lJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGF2YXRhckNvbmZpZyA9IHNpZ25hbDx7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBsb29rOiAnc2hhcnAnIHwgJ3NvZnQnIHwgJ3JvdW5kZWQnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgfT4oe1xuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgbG9vazogJ3JvdW5kZWQnLFxuICAgIHR5cGU6ICdzb2xpZCcsIC8vICdpbWFnZScgfCAndGV4dCcgfCAnaWNvbicgfCAnZGVmYXVsdCdcbiAgfSk7XG5cbiAgdmFsaWRhdGVDb250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcblxuICAgIGlmICghY29udGVudCB8fCBjb250ZW50ID09PSAnPHA+PGJyPjwvcD4nKSB7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBydWxlOiAnY2FsbGJhY2snLFxuICAgICAgcmVzdWx0OiBpc1ZhbGlkLFxuICAgICAgbWVzc2FnZTogaXNWYWxpZCA/ICcnIDogJ1BsZWFzZSBmaWxsIHRoZSBjb250ZW50JyxcbiAgICAgIHZhbHVlOiBjb250ZW50LFxuICAgIH07XG4gIH07XG5cbiAgc2FuaXRpemVIdG1sKGh0bWxDb250ZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odG1sVXRpbHMuZ2V0U2FmZUhUTUxmcm9tSFRNTChodG1sQ29udGVudCk7XG4gIH1cblxuICBoYW5kbGVJbWFnZUVycm9yKGltYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmFpbGVkSW1hZ2VJZHMudXBkYXRlKChpZHMpID0+IFsuLi5pZHMsIGltYWdlSWRdKTtcbiAgfVxuXG4gIGNoZWNrSW1hZ2VFeGlzdHMoaW1hZ2VJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmZhaWxlZEltYWdlSWRzKCkuaW5jbHVkZXMoaW1hZ2VJZCk7XG4gIH1cblxuICBleHRyYWN0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB3b3JkcyA9IG5hbWUuc3BsaXQoJyAnKTtcbiAgICBjb25zdCBpbml0aWFscyA9IHdvcmRzLm1hcCgod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSk7XG4gICAgcmV0dXJuIGluaXRpYWxzLmpvaW4oJycpO1xuICB9XG5cbiAgYXN5bmMgbG9hZENvbW1lbnRzKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5nZXQodGhpcy5wYXlsb2FkKCkpO1xuICAgIHRoaXMuY29tbWVudHMuc2V0KHJlc3BvbnNlLml0ZW1zKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYXRlRWRpdENvbW1lbnQoY29tbWVudDogQVhQQ29tbWVudCkge1xuICAgIHRoaXMuaXNSZXBseWluZ01vZGUuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmlzRWRpdGluZ01vZGUuc2V0KHRydWUpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KGNvbW1lbnQpO1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KGNvbW1lbnQuY29udGVudCk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtZWRpdG9yJylbMF0uaW5uZXJIVE1MID0gY29tbWVudC5jb250ZW50O1xuICAgIHRoaXMud3lzaXd5Z0VkaXRvcigpLmdldEhvc3RFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhdGVSZXBseUNvbW1lbnQoY29tbWVudDogQVhQQ29tbWVudCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQuc2V0KGNvbW1lbnQpO1xuICAgIHRoaXMud3lzaXd5Z0VkaXRvcigpLmdldEhvc3RFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQ29tbWVudChjb21tZW50OiBBWFBDb21tZW50KSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oe1xuICAgICAgaWNvbjogJ2ZhLXJlZ3VsYXIgZmEtd2FybmluZycsXG4gICAgICBjb250ZW50OiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JyxcbiAgICAgIHRpdGxlOiAnRGVsZXRlIENvbW1lbnQnLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgIG9uQ2xpY2s6IGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGUuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICBlLnNvdXJjZS50ZXh0ID0gJ0RlbGV0aW5nLi4uJztcbiAgICAgICAgICAgIGUuc291cmNlLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuc291cmNlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGUoeyBpZDogY29tbWVudC5pZCB9KTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50QnlJZChjb21tZW50LmlkKTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ0NvbW1lbnQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6ICdGYWlsZWQgdG8gZGVsZXRlIGNvbW1lbnQhJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICAgICAgICAgIHRpbWVPdXRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgIGNvbG9yOiAnZ2hvc3QnLFxuICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgICBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldFJlcGx5RWRpdFN0YXRlKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgYXN5bmMgdG9nZ2xlTGlrZUNvbW1lbnQoY29tbWVudDogYW55KSB7XG4gICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IEFYUExpa2VSZXF1ZXN0ID0ge1xuICAgICAgbWVzc2FnZUlkOiBjb21tZW50LmlkLFxuICAgICAgdHlwZTogJ2xpa2UnLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UubGlrZShwYXlsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGlrZVN0YXR1cyhjb21tZW50SWQ6IHN0cmluZykge1xuICAgIHRoaXMuY29tbWVudHMudXBkYXRlKChjb21tZW50c0xpc3QpID0+IHtcbiAgICAgIHJldHVybiBjb21tZW50c0xpc3QubWFwKChjb21tZW50KSA9PlxuICAgICAgICBjb21tZW50LmlkID09PSBjb21tZW50SWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uY29tbWVudCxcbiAgICAgICAgICAgICAgaXNMaWtlZDogIWNvbW1lbnQuaXNMaWtlZCxcbiAgICAgICAgICAgICAgcmVhY3Rpb25zQ291bnQ6IGNvbW1lbnQuaXNMaWtlZCA/IC0tY29tbWVudC5yZWFjdGlvbnNDb3VudCA6ICsrY29tbWVudC5yZWFjdGlvbnNDb3VudCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IGNvbW1lbnRcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUNvbW1lbnRCeUlkKGNvbW1lbnRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzTGlzdCkgPT4gY29tbWVudHNMaXN0LmZpbHRlcigoY29tbWVudCkgPT4gY29tbWVudC5pZCAhPT0gY29tbWVudElkKSk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRQcml2YXRlQ29tbWVudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVDb250ZW50KHRoaXMuY29tbWVudENvbnRlbnQoKSkucmVzdWx0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9wdXBDb25maWc6IEFYUG9wdXBDb25maWcgPSB7XG4gICAgICBoZWFkZXI6IHRydWUsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IHBvcHVwID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBDb21tZW50TG9va3VwUG9wdXAsIHBvcHVwQ29uZmlnKTtcblxuICAgIGNvbnN0IHBheWxvYWQ6IEFYUFBvc3RSZXF1ZXN0ID0ge1xuICAgICAgLi4udGhpcy5wYXlsb2FkKCksXG4gICAgICBjb250ZW50OiB0aGlzLmNvbW1lbnRDb250ZW50KCksXG4gICAgICBjb250ZW50VHlwZTogJ3RleHQnLFxuICAgICAgaXNQcml2YXRlOiBmYWxzZSxcbiAgICAgIHJlcGx5SWQ6IHRoaXMuYWN0aXZlUmVwbHlDb21tZW50KCk/LmlkLFxuICAgICAgbWVtYmVyczogW3BvcHVwLmRhdGE/LmRhdGE/Lmxvb2t1cF0sXG4gICAgfTtcbiAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5oYXNDb29sZG93bi5zZXQodHJ1ZSk7XG4gICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5wb3N0KHBheWxvYWQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5nZXQodGhpcy5wYXlsb2FkKCkpO1xuICAgIHRoaXMuY29tbWVudHMuc2V0KHJlc3BvbnNlLml0ZW1zKTtcbiAgICB0aGlzLmNvbW1lbnRDb250ZW50LnNldCgnJyk7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtZWRpdG9yJylbMF0uaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGFzQ29vbGRvd24uc2V0KGZhbHNlKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdENvbW1lbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29udGVudCh0aGlzLmNvbW1lbnRDb250ZW50KCkpLnJlc3VsdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkOiBBWFBQb3N0UmVxdWVzdCA9IHtcbiAgICAgIC4uLnRoaXMucGF5bG9hZCgpLFxuICAgICAgY29udGVudDogdGhpcy5jb21tZW50Q29udGVudCgpLFxuICAgICAgY29udGVudFR5cGU6ICd0ZXh0JyxcbiAgICAgIGlzUHJpdmF0ZTogZmFsc2UsXG4gICAgICByZXBseUlkOiB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudCgpPy5pZCxcbiAgICB9O1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuaGFzQ29vbGRvd24uc2V0KHRydWUpO1xuICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UucG9zdChwYXlsb2FkKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZ2V0KHRoaXMucGF5bG9hZCgpKTtcbiAgICB0aGlzLmNvbW1lbnRzLnNldChyZXNwb25zZS5pdGVtcyk7XG4gICAgdGhpcy5jb21tZW50Q29udGVudC5zZXQoJycpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhhc0Nvb2xkb3duLnNldChmYWxzZSk7XG4gICAgfSwgMTAwMCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1tdC0yXCI+XG4gIDxheC1jb21tZW50LXZpZXcgY2xhc3M9XCJheC1iZy1zdXJmYWNlXCI+XG4gICAgQGZvcihjb21tZW50IG9mIGNvbW1lbnRzKCk7IHRyYWNrIGNvbW1lbnQuaWQpe1xuICAgIDxheC1jb21tZW50LWl0ZW0+XG4gICAgICA8YXgtYXZhdGFyIFtjb2xvcl09XCJhdmF0YXJDb25maWcoKS5jb2xvclwiIFtsb29rXT1cImF2YXRhckNvbmZpZygpLmxvb2tcIj5cbiAgICAgICAgQGlmKGNoZWNrSW1hZ2VFeGlzdHMoY29tbWVudC5pZCkgJiYgY29tbWVudC51c2VyLnBpY3R1cmUpe1xuICAgICAgICA8YXgtaW1hZ2UgKG9uRXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcihjb21tZW50LmlkKVwiIFtzcmNdPVwiY29tbWVudC51c2VyLnBpY3R1cmVcIj5cbiAgICAgICAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gICAgICAgIDwvYXgtaW1hZ2U+XG4gICAgICAgIH1AZWxzZXtcbiAgICAgICAgPGF4LXRleHQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LWJhc2UgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+e3tcbiAgICAgICAgICAgIGV4dHJhY3RJbml0aWFscyhjb21tZW50LnVzZXIuZmlyc3ROYW1lICsgJyAnICsgY29tbWVudC51c2VyLmxhc3ROYW1lKVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2F4LXRleHQ+XG4gICAgICAgIH1cbiAgICAgIDwvYXgtYXZhdGFyPlxuICAgICAgPGF4LXRpdGxlPnt7IGNvbW1lbnQudXNlci5maXJzdE5hbWUgKyAnICcgKyBjb21tZW50LnVzZXIubGFzdE5hbWUgfX08L2F4LXRpdGxlPlxuICAgICAgPGF4LWNvbW1lbnQtbWVudS1vcHRpb25zPlxuICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgtc21cIiBsb29rPVwiYmxhbmtcIiBjb2xvcj1cInNlY29uZGFyeVwiPlxuICAgICAgICAgIDxheC1pY29uIGljb249XCJheC1pY29uIGF4LWljb24tc29saWQgYXgtaWNvbi1tb3JlLWhvcml6b250YWxcIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuXG4gICAgICAgIDxheC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRWRpdFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImluaXRpYXRlRWRpdENvbW1lbnQoY29tbWVudClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZWRpdFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuXG4gICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gdGV4dD1cIkRlbGV0ZVwiIGNvbG9yPVwiZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZUNvbW1lbnQoY29tbWVudClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgPC9heC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgIDxheC1jb250ZW50IFtpbm5lckhUTUxdPVwic2FuaXRpemVIdG1sKGNvbW1lbnQuY29udGVudClcIj48L2F4LWNvbnRlbnQ+XG4gICAgICA8YXgtY29tbWVudC1saWtlIChjbGljayk9XCJ0b2dnbGVMaWtlQ29tbWVudChjb21tZW50KVwiIFtsaWtlZF09XCJjb21tZW50LmlzTGlrZWRcIj5cbiAgICAgICAge3sgY29tbWVudC5yZWFjdGlvbnNDb3VudCB9fVxuICAgICAgPC9heC1jb21tZW50LWxpa2U+XG4gICAgICA8YXgtY29tbWVudC1yZXBseS10ZXh0IChjbGljayk9XCJpbml0aWF0ZVJlcGx5Q29tbWVudChjb21tZW50KVwiPjwvYXgtY29tbWVudC1yZXBseS10ZXh0PlxuICAgICAgQGZvcihyZXBseSBvZiBjb21tZW50LnJlcGxpZXM7IHRyYWNrIHJlcGx5LmlkKXtcbiAgICAgIDxheC1jb21tZW50LWl0ZW0+XG4gICAgICAgIEBpZihjaGVja0ltYWdlRXhpc3RzKHJlcGx5LmlkKSAmJiByZXBseT8udXNlcj8ucGljdHVyZSl7XG4gICAgICAgIDxheC1pbWFnZSAob25FcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKHJlcGx5LmlkKVwiIFtzcmNdPVwicmVwbHk/LnVzZXI/LnBpY3R1cmVcIj5cbiAgICAgICAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gICAgICAgIDwvYXgtaW1hZ2U+XG4gICAgICAgIH1AZWxzZXtcbiAgICAgICAgPGF4LXRleHQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LWJhc2UgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+e3tcbiAgICAgICAgICAgIGV4dHJhY3RJbml0aWFscyhyZXBseT8udXNlcj8uZmlyc3ROYW1lICsgJyAnICsgcmVwbHk/LnVzZXI/Lmxhc3ROYW1lKVxuICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICA8L2F4LXRleHQ+XG4gICAgICAgIH1cbiAgICAgICAgPGF4LXRpdGxlPnt7IChyZXBseT8udXNlcj8uZmlyc3ROYW1lID8/ICcnKSArICcgJyArIChyZXBseT8udXNlcj8ubGFzdE5hbWUgPz8gJycpIH19PC9heC10aXRsZT5cbiAgICAgICAgPGF4LWNvbnRlbnQgW2lubmVySFRNTF09XCJzYW5pdGl6ZUh0bWwocmVwbHkuY29udGVudClcIj48L2F4LWNvbnRlbnQ+XG4gICAgICAgIDxheC1jb21tZW50LWxpa2UgKGNsaWNrKT1cInRvZ2dsZUxpa2VDb21tZW50KHJlcGx5KVwiIFtsaWtlZF09XCJyZXBseS5pc0xpa2VkXCI+XG4gICAgICAgICAge3sgcmVwbHkucmVhY3Rpb25zQ291bnQgfX1cbiAgICAgICAgPC9heC1jb21tZW50LWxpa2U+XG4gICAgICAgIDxheC1jb21tZW50LXJlcGx5LXRleHQgKGNsaWNrKT1cImluaXRpYXRlUmVwbHlDb21tZW50KHJlcGx5KVwiPjwvYXgtY29tbWVudC1yZXBseS10ZXh0PlxuICAgICAgPC9heC1jb21tZW50LWl0ZW0+XG4gICAgICB9XG4gICAgPC9heC1jb21tZW50LWl0ZW0+XG4gICAgfSBAZW1wdHl7IH1cbiAgPC9heC1jb21tZW50LXZpZXc+XG5cbiAgPGF4LWZvcm0+XG4gICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtYm9yZGVyIGF4LW92ZXJmbG93LWhpZGRlbiBheC1yb3VuZGVkLWxnXCI+XG4gICAgICAgIEBpZihpc1JlcGx5aW5nTW9kZSgpIHx8IGlzRWRpdGluZ01vZGUoKSl7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWJvcmRlci1iIGF4LWJnLW9uLXN1cmZhY2UgYXgtcHgtNiBheC1weS00IGF4LXctZnVsbCBheC1pdGVtcy1jZW50ZXIgYXgtb3ZlcmZsb3ctaGlkZGVuIGF4LXRleHQtc20gYXgtbGVhZGluZy1ub25lXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWp1c3RpZnktc3RhcnQgYXgtYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBbY2xhc3NdPVwiaXNSZXBseWluZ01vZGUoKSA/ICdmYS1yZXBseScgOiAnZmEtcGVuJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmEtc29saWQgYXgtdGV4dC1wcmltYXJ5LTUwMCBheC10ZXh0LTJ4bCBheC1tZS00XCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMiBheC1qdXN0aWZ5LWJldHdlZW4gYXgtYWxpZ24tbWlkZGxlXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC1wcmltYXJ5LTUwMFwiPlxuICAgICAgICAgICAgICAgIHt7IGlzUmVwbHlpbmdNb2RlKCkgPyAnUmVwbHkgdG8gJyA6ICdFZGl0IE1lc3NhZ2UnIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIGlzUmVwbHlpbmdNb2RlKClcbiAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZVJlcGx5Q29tbWVudCgpPy51c2VyPy5maXJzdE5hbWUgKyAnICcgKyBhY3RpdmVSZXBseUNvbW1lbnQoKT8udXNlcj8ubGFzdE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgIGlzUmVwbHlpbmdNb2RlKClcbiAgICAgICAgICAgICAgICAgICAgPyBzYW5pdGl6ZUh0bWwoYWN0aXZlUmVwbHlDb21tZW50KCk/LmNvbnRlbnQgPz8gJycpXG4gICAgICAgICAgICAgICAgICAgIDogc2FuaXRpemVIdG1sKGFjdGl2ZUVkaXRDb21tZW50KCk/LmNvbnRlbnQgPz8gJycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj48aSAoY2xpY2spPVwicmVzZXRSZXBseUVkaXRTdGF0ZSgpXCIgY2xhc3M9XCJmYS1zb2xpZCBheC10ZXh0LTJ4bCBmYS14bWFyayBheC1jdXJzb3ItcG9pbnRlclwiPjwvaT48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGF4LXd5c2l3eWctY29udGFpbmVyICN3IFtsb29rXT1cInd5c2l3eWdPcHRpb25zKCkubG9va1wiIFsobmdNb2RlbCldPVwiY29tbWVudENvbnRlbnRcIj5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy12aWV3IGNsYXNzPVwiYXgtbWluLWgtMjhcIj48L2F4LXd5c2l3eWctdmlldz5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy10b29sYmFyPlxuICAgICAgICAgICAgPGF4LXd5c2l3eWctaGlzdG9yeT48L2F4LXd5c2l3eWctaGlzdG9yeT5cbiAgICAgICAgICAgIDxheC13eXNpd3lnLWZvbnQtc3R5bGU+PC9heC13eXNpd3lnLWZvbnQtc3R5bGU+XG4gICAgICAgICAgICA8YXgtd3lzaXd5Zy1jb2xvcnM+PC9heC13eXNpd3lnLWNvbG9ycz5cbiAgICAgICAgICAgIDxheC13eXNpd3lnLWxpc3Q+PC9heC13eXNpd3lnLWxpc3Q+XG4gICAgICAgICAgICA8YXgtd3lzaXd5Zy1hbGlnbm1lbnQ+PC9heC13eXNpd3lnLWFsaWdubWVudD5cbiAgICAgICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICAgIDxheC1kcm9wZG93bi1idXR0b25cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaGFzQ29vbGRvd24oKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBtb2RlPVwic3BsaXRcIlxuICAgICAgICAgICAgICAgIHRleHQ9XCJTZW5kXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJzdWJtaXRDb21tZW50KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmKGlzU3VibWl0dGluZygpKXsgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPiB9XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdFByaXZhdGVDb21tZW50KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU2VuZCBQcml2YXRlIC4uLlwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwcml2YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YT1cInByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1yZWd1bGFyIGZhLXVzZXItc2VjcmV0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICA8L2F4LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgIDwvYXgtd3lzaXd5Zy10b29sYmFyPlxuICAgICAgICAgIDxheC12YWxpZGF0aW9uLXJ1bGUgcnVsZT1cImNhbGxiYWNrXCIgW29wdGlvbnNdPVwieyB2YWxpZGF0ZTogdmFsaWRhdGVDb250ZW50IH1cIj48L2F4LXZhbGlkYXRpb24tcnVsZT5cbiAgICAgICAgPC9heC13eXNpd3lnLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgPC9heC1mb3JtPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export class AXPCommentService {
|
|
2
|
-
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL2VudGl0eS1sYXlvdXRzL2VudGl0eS1tYXN0ZXItc2luZ2xlLXZpZXcvY29tbWVudHMvY29tbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxNQUFNLE9BQWdCLGlCQUFpQjtDQVF0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYUENvbW1lbnRSZXNwb25zZSxcbiAgQVhQRGVsZXRlUmVxdWVzdCxcbiAgQVhQR2V0UmVxdWVzdCxcbiAgQVhQTGlrZVJlcXVlc3QsXG4gIEFYUFBvc3RSZXF1ZXN0LFxuICBBWFBQdXRSZXF1ZXN0LFxufSBmcm9tICcuL2NvbW1lbnRzLnR5cGUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhQQ29tbWVudFNlcnZpY2Uge1xuICBhYnN0cmFjdCBnZXQocGF5bG9hZDogQVhQR2V0UmVxdWVzdCk6IFByb21pc2U8QVhQQ29tbWVudFJlc3BvbnNlPjtcbiAgYWJzdHJhY3QgcG9zdChwYXlsb2FkOiBBWFBQb3N0UmVxdWVzdCk6IFByb21pc2U8c3RyaW5nPjtcbiAgYWJzdHJhY3QgZGVsZXRlKHBheWxvYWQ6IEFYUERlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+O1xuICBhYnN0cmFjdCBwdXQocGF5bG9hZDogQVhQUHV0UmVxdWVzdCk6IFByb21pc2U8c3RyaW5nPjtcbiAgYWJzdHJhY3QgbGlrZShwYXlsb2FkOiBBWFBMaWtlUmVxdWVzdCk6IFByb21pc2U8c3RyaW5nPjtcbiAgLy8gYWJzdHJhY3QgZGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIC8vIGFic3RyYWN0IGVkaXRDb21tZW50KHBheWxvYWQ6IEFYUENvbW1lbnQpOiBQcm9taXNlPEFYUENvbW1lbnQ+O1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL2VudGl0eS1sYXlvdXRzL2VudGl0eS1tYXN0ZXItc2luZ2xlLXZpZXcvY29tbWVudHMvY29tbWVudHMudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBWFBDb21tZW50VmlzaWJsZU1lc3NhZ2Uge1xuICBpZDogc3RyaW5nO1xuICBtZW1iZXJJZDogc3RyaW5nO1xuICBtZW1iZXJUeXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQQ29tbWVudFN0YXR1c01lc3NhZ2Uge1xuICBpZDogc3RyaW5nO1xuICBtZW1iZXJJZDogc3RyaW5nO1xuICBtZW1iZXJUeXBlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUENvbW1lbnRIaXN0b3J5TWVzc2FnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY29udGVudFR5cGU6IHN0cmluZztcbiAgaXNQcml2YXRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUENvbW1lbnRVc2VyRGV0YWlscyB7XG4gIGlkOiBzdHJpbmc7XG4gIHVzZXJOYW1lOiBzdHJpbmc7XG4gIGZpcnN0TmFtZTogc3RyaW5nO1xuICBsYXN0TmFtZTogc3RyaW5nO1xuICBwaWN0dXJlOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUENvbW1lbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIG1lbWJlcklkOiBzdHJpbmc7XG4gIG1lbWJlclR5cGU6IHN0cmluZztcbiAgcm9vbUlkOiBzdHJpbmc7XG4gIGlzUHJpdmF0ZTogYm9vbGVhbjtcbiAgcmVwbHlJZDogc3RyaW5nIHwgbnVsbDtcbiAgbWVzc2FnZVZpc2libGVzOiBBWFBDb21tZW50VmlzaWJsZU1lc3NhZ2VbXTtcbiAgbWVzc2FnZVN0YXR1c2VzOiBBWFBDb21tZW50U3RhdHVzTWVzc2FnZVtdO1xuICBtZXNzYWdlSGlzdG9yaWVzOiBBWFBDb21tZW50SGlzdG9yeU1lc3NhZ2VbXTtcbiAgcmVwbGllczogQVhQQ29tbWVudFtdO1xuICBpc0FyY2hpdmVkOiBib29sZWFuO1xuICBpc0xpa2VkOiBib29sZWFuO1xuICByZWFjdGlvbnNDb3VudDogbnVtYmVyO1xuICByZXBsaWVzQ291bnQ6IG51bWJlcjtcbiAgdXNlcjogQVhQQ29tbWVudFVzZXJEZXRhaWxzO1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUENvbW1lbnRSZXNwb25zZSB7XG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgaXRlbXM6IEFYUENvbW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBQb3N0UmVxdWVzdCBleHRlbmRzIFBhcnRpYWw8QVhQQ29tbWVudD4ge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIGlzUHJpdmF0ZTogYm9vbGVhbjtcbiAgcmVwbHlJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZW1iZXJzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQR2V0UmVxdWVzdCBleHRlbmRzIFBhcnRpYWw8QVhQQ29tbWVudD4ge1xuICByb29tVHlwZTogc3RyaW5nO1xuICBlbnRpdHlJZDogc3RyaW5nO1xuICBpbnN0YW5jZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGVsZXRlUmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQUHV0UmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBMaWtlUmVxdWVzdCB7XG4gIG1lc3NhZ2VJZDogc3RyaW5nO1xuICB0eXBlOiAnbGlrZSc7XG59XG4iXX0=
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import * as i2$1 from '@acorex/components/button';
|
|
2
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
3
|
-
import * as i2 from '@acorex/components/common';
|
|
4
|
-
import { AXCommonModule } from '@acorex/components/common';
|
|
5
|
-
import * as i1$1 from '@acorex/components/decorators';
|
|
6
|
-
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
7
|
-
import { AXBasePageComponent } from '@acorex/components/page';
|
|
8
|
-
import * as i7 from '@acorex/components/search-box';
|
|
9
|
-
import { AXSearchBoxModule } from '@acorex/components/search-box';
|
|
10
|
-
import * as i2$2 from '@acorex/components/tabs';
|
|
11
|
-
import { AXTabsModule } from '@acorex/components/tabs';
|
|
12
|
-
import { AXPStickyDirective } from '@acorex/platform/common';
|
|
13
|
-
import { AXP_WIDGETS_GROUPS } from '@acorex/platform/layout/builder';
|
|
14
|
-
import * as i1 from '@angular/common';
|
|
15
|
-
import { CommonModule } from '@angular/common';
|
|
16
|
-
import * as i0 from '@angular/core';
|
|
17
|
-
import { model, signal, computed, Component, ViewEncapsulation } from '@angular/core';
|
|
18
|
-
import * as i3 from '@angular/forms';
|
|
19
|
-
import { FormsModule } from '@angular/forms';
|
|
20
|
-
import { orderBy } from 'lodash-es';
|
|
21
|
-
|
|
22
|
-
class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {
|
|
23
|
-
constructor() {
|
|
24
|
-
super(...arguments);
|
|
25
|
-
this.searchTerm = model('');
|
|
26
|
-
// Signals
|
|
27
|
-
this.widgets = [];
|
|
28
|
-
this.displayWidgets = signal([]);
|
|
29
|
-
// Signal to track selected widgets
|
|
30
|
-
this.selectedWidgets = signal([]);
|
|
31
|
-
// Computed for filtered and ordered widget list
|
|
32
|
-
this.orderedList = computed(() => {
|
|
33
|
-
const search = this.searchTerm().toLowerCase();
|
|
34
|
-
const selectedTabName = this.selectedTab().name;
|
|
35
|
-
return orderBy(this.displayWidgets().filter(w => {
|
|
36
|
-
const matchesTab = selectedTabName === 'all' || w.group.name === selectedTabName;
|
|
37
|
-
const matchesSearch = !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);
|
|
38
|
-
return matchesTab && matchesSearch;
|
|
39
|
-
}), ['pinned', 'title'], ['desc', 'asc']);
|
|
40
|
-
});
|
|
41
|
-
// Pinned and regular lists
|
|
42
|
-
this.pinnedList = computed(() => this.orderedList().filter(c => c.pinned));
|
|
43
|
-
this.regularList = computed(() => this.orderedList().filter(c => !c.pinned));
|
|
44
|
-
// Tabs for the widget groups
|
|
45
|
-
this.tabs = orderBy([{ name: 'all', title: 'All', order: 0 }, ...AXP_WIDGETS_GROUPS], c => c.order);
|
|
46
|
-
this.currentTabIndex = signal(0);
|
|
47
|
-
this.selectedTab = computed(() => this.tabs[this.currentTabIndex()]);
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
super.ngOnInit();
|
|
51
|
-
this.displayWidgets.set(this.widgets.map(c => ({ ...c, pinned: false })));
|
|
52
|
-
}
|
|
53
|
-
handleTabChange(event) {
|
|
54
|
-
const indx = event.index;
|
|
55
|
-
if (this.currentTabIndex() != indx) {
|
|
56
|
-
this.currentTabIndex.set(indx);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
handleClick(event, widget) {
|
|
60
|
-
//this.close({ widgets: [widget] });
|
|
61
|
-
if (event.ctrlKey) {
|
|
62
|
-
const currentSelection = this.selectedWidgets();
|
|
63
|
-
const isAlreadySelected = currentSelection.some(w => w === widget);
|
|
64
|
-
if (isAlreadySelected) {
|
|
65
|
-
// Deselect widget if already selected
|
|
66
|
-
this.selectedWidgets.set(currentSelection.filter(w => w !== widget));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
// Add widget to selection
|
|
70
|
-
this.selectedWidgets.set([...currentSelection, widget]);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
// If CTRL is not pressed, select only the clicked widget
|
|
75
|
-
//this.selectedWidgets.set([widget]);
|
|
76
|
-
this.close({ widgets: [widget] });
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
handlePinClick(e, widget) {
|
|
80
|
-
e.stopPropagation();
|
|
81
|
-
widget.pinned = !widget.pinned;
|
|
82
|
-
this.displayWidgets.set([...this.displayWidgets()]);
|
|
83
|
-
}
|
|
84
|
-
// Check if a widget is selected
|
|
85
|
-
isWidgetSelected(widget) {
|
|
86
|
-
return this.selectedWidgets().includes(widget);
|
|
87
|
-
}
|
|
88
|
-
handleConfirmSelection() {
|
|
89
|
-
this.close({ widgets: this.selectedWidgets() });
|
|
90
|
-
}
|
|
91
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
92
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
93
|
-
}
|
|
94
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, decorators: [{
|
|
95
|
-
type: Component,
|
|
96
|
-
args: [{ standalone: true, imports: [CommonModule, AXCommonModule, FormsModule, AXButtonModule, AXDecoratorModule, AXTabsModule, AXSearchBoxModule, AXPStickyDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"] }]
|
|
97
|
-
}] });
|
|
98
|
-
|
|
99
|
-
export { AXPDesignerWidgetPickerComponent };
|
|
100
|
-
//# sourceMappingURL=acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-designer-widget-picker.component-BZryrCyh.mjs","sources":["../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.ts","../../../../libs/platform/layout/designer/src/lib/designer/components/widget-picker/widget-picker.component.html"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXP_WIDGETS_GROUPS, AXPWidgetConfig, AXPWidgetGroup } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, model, signal, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { orderBy } from 'lodash-es';\n\n\nexport interface AXPDisplayWidgetConfig extends AXPWidgetConfig {\n pinned: boolean;\n}\n\n\n@Component({\n standalone: true,\n imports: [CommonModule, AXCommonModule, FormsModule, AXButtonModule, AXDecoratorModule, AXTabsModule, AXSearchBoxModule, AXPStickyDirective],\n templateUrl: './widget-picker.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./widget-picker.component.scss'],\n})\nexport class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {\n\n\n protected searchTerm = model('');\n\n // Signals\n private widgets: AXPWidgetConfig[] = [];\n private displayWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetConfig[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedTabName = this.selectedTab().name;\n\n return orderBy(\n this.displayWidgets().filter(w => {\n const matchesTab = selectedTabName === 'all' || w.group.name === selectedTabName;\n const matchesSearch = !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesTab && matchesSearch;\n }),\n ['pinned', 'title'], ['desc', 'asc']\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter(c => c.pinned));\n protected regularList = computed(() => this.orderedList().filter(c => !c.pinned));\n\n // Tabs for the widget groups\n protected tabs: AXPWidgetGroup[] = orderBy([{ name: 'all', title: 'All', order: 0 }, ...AXP_WIDGETS_GROUPS], c => c.order);\n protected currentTabIndex = signal(0);\n protected selectedTab = computed(() => this.tabs[this.currentTabIndex()]);\n\n\n protected override ngOnInit(): void {\n super.ngOnInit();\n this.displayWidgets.set(this.widgets.map(c => ({ ...c, pinned: false })))\n }\n\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const indx = event.index;\n if (this.currentTabIndex() != indx) {\n this.currentTabIndex.set(indx);\n }\n }\n\n protected handleClick(event: MouseEvent, widget: AXPDisplayWidgetConfig) {\n //this.close({ widgets: [widget] });\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some(w => w === widget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter(w => w !== widget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, widget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n //this.selectedWidgets.set([widget]);\n this.close({ widgets: [widget] });\n }\n }\n\n protected handlePinClick(e: MouseEvent, widget: AXPDisplayWidgetConfig) {\n e.stopPropagation();\n widget.pinned = !widget.pinned;\n this.displayWidgets.set([...this.displayWidgets()]);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetConfig): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n\n}\n","<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}"],"names":["i5","i6"],"mappings":"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"}
|