ngx-bimplus-components 0.0.151 → 0.0.152-28780-2

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.
Files changed (115) hide show
  1. package/assets/images/default/Attachment_18_gray.svg +1 -0
  2. package/assets/images/default/Attachment_18_maincolor.svg +3 -0
  3. package/assets/images/default/Attachmentlink_18_gray.svg +7 -0
  4. package/assets/images/default/Attachmentlink_18_maincolor.svg +7 -0
  5. package/assets/images/default/Comments_18_gray.svg +1 -0
  6. package/assets/images/default/Comments_18_maincolor.svg +4 -0
  7. package/assets/images/default/Links_18_gray.svg +1 -0
  8. package/assets/images/default/Links_18_maincolor.svg +4 -0
  9. package/assets/images/default/Refresh_18_gray.svg +1 -0
  10. package/assets/images/default/ic_models.svg +3 -0
  11. package/assets/images/default/ic_models_maincolor.svg +3 -0
  12. package/assets/images/default/icn_grid_attachments.png +0 -0
  13. package/assets/images/default/icn_grid_hyperlinks.png +0 -0
  14. package/assets/languages/strings_en.json +3 -1
  15. package/esm2022/lib/components/bimplus-attachments/bimplus-attachments.component.mjs +101 -0
  16. package/esm2022/lib/components/bimplus-attachments/bimplus-attachments.interface.mjs +38 -0
  17. package/esm2022/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.mjs +92 -0
  18. package/esm2022/lib/components/bimplus-attachments/services/bimplus-attachments.service.mjs +32 -0
  19. package/esm2022/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.mjs +18 -5
  20. package/esm2022/lib/components/bimplus-buttons-row/bimplus-buttons-row.interface.mjs +5 -2
  21. package/esm2022/lib/components/bimplus-comment/IComment.mjs +2 -0
  22. package/esm2022/lib/components/bimplus-comment/bimplus-comment.component.mjs +114 -0
  23. package/esm2022/lib/components/bimplus-connection-designer/bimplus-connection-designer.component.mjs +5 -5
  24. package/esm2022/lib/components/bimplus-connection-designer-results/bimplus-connection-designer-results.component.mjs +3 -3
  25. package/esm2022/lib/components/bimplus-flat-tree/bimplus-flat-tree.component.mjs +3 -3
  26. package/esm2022/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.mjs +1 -1
  27. package/esm2022/lib/components/bimplus-general-overlay-dialog/bimplus-general-dialog-config-settings.mjs +1 -1
  28. package/esm2022/lib/components/bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.component.mjs +3 -3
  29. package/esm2022/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.mjs +68 -0
  30. package/esm2022/lib/components/bimplus-main-menu/bimplus-main-menu.component.mjs +16 -4
  31. package/esm2022/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.mjs +327 -0
  32. package/esm2022/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service.mjs +69 -0
  33. package/esm2022/lib/components/bimplus-object-comments-list/bimplusObjectCommentsI.mjs +2 -0
  34. package/esm2022/lib/components/bimplus-object-complex-properties/bimplus-object-complex-properties.component.mjs +3 -3
  35. package/esm2022/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.mjs +6 -3
  36. package/esm2022/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.mjs +3 -3
  37. package/esm2022/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.interface.mjs +1 -1
  38. package/esm2022/lib/components/bimplus-object-navigator/object-filter-result/object-filter-result.component.mjs +3 -3
  39. package/esm2022/lib/components/bimplus-object-structure/bimplus-object-structure.component.mjs +3 -3
  40. package/esm2022/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.mjs +77 -0
  41. package/esm2022/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.mjs +83 -0
  42. package/esm2022/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.mjs +31 -8
  43. package/esm2022/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.mjs +34 -8
  44. package/esm2022/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.mjs +1 -1
  45. package/esm2022/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.mjs +38 -0
  46. package/esm2022/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface.mjs +10 -0
  47. package/esm2022/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.mjs +89 -0
  48. package/esm2022/lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service.mjs +33 -0
  49. package/esm2022/lib/components/bimplus-textarea/autoResizeTextarea.directive.mjs +83 -0
  50. package/esm2022/lib/components/bimplus-textarea/bimplus-textarea.component.mjs +128 -0
  51. package/esm2022/lib/components/links-to-documents/links-to-documents.component.interface.mjs +2 -0
  52. package/esm2022/lib/components/links-to-documents/links-to-documents.component.mjs +367 -0
  53. package/esm2022/lib/components/object-hyperlinks/object-hyperlinks.component.mjs +145 -0
  54. package/esm2022/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.mjs +36 -0
  55. package/esm2022/lib/components/object-preview/object-preview.component.mjs +225 -0
  56. package/esm2022/lib/components/object-properties/object-properties.component.mjs +262 -0
  57. package/esm2022/lib/components/object-properties/object-properties.interface.mjs +2 -0
  58. package/esm2022/lib/components/object-properties-group/object-properties-group.component.mjs +40 -0
  59. package/esm2022/lib/components/object-properties-group/object-property-value/object-property-value.component.mjs +55 -0
  60. package/esm2022/lib/components/object-properties-header/object-properties-header.component.mjs +19 -4
  61. package/esm2022/lib/components/object-properties-header/object-properties-header.interface.mjs +1 -1
  62. package/esm2022/lib/components/resizable-panel/resizable-panel.component.mjs +2 -2
  63. package/esm2022/lib/pipes/bit-converter.pipe.mjs +46 -0
  64. package/esm2022/lib/pipes/get-attribute-value.pipe.mjs +110 -0
  65. package/esm2022/lib/pipes/round.pipe.mjs +20 -0
  66. package/esm2022/lib/utils/objectProperties.mjs +9 -0
  67. package/esm2022/public-api.mjs +18 -1
  68. package/fesm2022/ngx-bimplus-components.mjs +2694 -70
  69. package/fesm2022/ngx-bimplus-components.mjs.map +1 -1
  70. package/lib/components/bimplus-attachments/bimplus-attachments.component.d.ts +37 -0
  71. package/lib/components/bimplus-attachments/bimplus-attachments.interface.d.ts +33 -0
  72. package/lib/components/bimplus-attachments/components/bimplus-attachment-item/bimplus-attachment-item.component.d.ts +30 -0
  73. package/lib/components/bimplus-attachments/services/bimplus-attachments.service.d.ts +8 -0
  74. package/lib/components/bimplus-buttons-row/bimplus-buttons-row.component.d.ts +9 -3
  75. package/lib/components/bimplus-buttons-row/bimplus-buttons-row.interface.d.ts +5 -0
  76. package/lib/components/bimplus-comment/IComment.d.ts +4 -0
  77. package/lib/components/bimplus-comment/bimplus-comment.component.d.ts +39 -0
  78. package/lib/components/bimplus-floating-bar-header-logo/bimplus-floating-bar-header-logo.component.d.ts +1 -1
  79. package/lib/components/bimplus-general-overlay-dialog/bimplus-general-dialog-config-settings.d.ts +3 -3
  80. package/lib/components/bimplus-input-text-field/bimplus-input-text-field.component.d.ts +20 -0
  81. package/lib/components/bimplus-main-menu/bimplus-main-menu.component.d.ts +3 -1
  82. package/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.component.d.ts +81 -0
  83. package/lib/components/bimplus-object-comments-list/bimplus-object-comments-list.service.d.ts +15 -0
  84. package/lib/components/bimplus-object-comments-list/bimplusObjectCommentsI.d.ts +11 -0
  85. package/lib/components/bimplus-object-navigator/bimplus-object-navigator.component.d.ts +2 -1
  86. package/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.component.d.ts +7 -7
  87. package/lib/components/bimplus-object-navigator/criteria-select-object-properties/criteria-select-object-properties.interface.d.ts +3 -3
  88. package/lib/components/bimplus-overlay-dialog-confirm/bimplus-overlay-dialog-confirm.component.d.ts +29 -0
  89. package/lib/components/bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component.d.ts +24 -0
  90. package/lib/components/bimplus-overlay-dialog-error/bimplus-overlay-dialog-error.component.d.ts +8 -1
  91. package/lib/components/bimplus-overlay-dialog-warning/bimplus-overlay-dialog-warning.component.d.ts +11 -1
  92. package/lib/components/bimplus-scrollable-container/bimplus-scrollable-container.component.d.ts +1 -1
  93. package/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.component.d.ts +16 -0
  94. package/lib/components/bimplus-tabs-switcher/bimplus-tabs-switcher.interface.d.ts +18 -0
  95. package/lib/components/bimplus-tabs-switcher/components/bimplus-tab/bimplus-tab.component.d.ts +36 -0
  96. package/lib/components/bimplus-tabs-switcher/services/bimplus-tabs-switcher.service.d.ts +15 -0
  97. package/lib/components/bimplus-textarea/autoResizeTextarea.directive.d.ts +24 -0
  98. package/lib/components/bimplus-textarea/bimplus-textarea.component.d.ts +42 -0
  99. package/lib/components/links-to-documents/links-to-documents.component.d.ts +66 -0
  100. package/lib/components/links-to-documents/links-to-documents.component.interface.d.ts +11 -0
  101. package/lib/components/object-hyperlinks/object-hyperlinks.component.d.ts +32 -0
  102. package/lib/components/object-hyperlinks-item/object-hyperlinks-item.component.d.ts +15 -0
  103. package/lib/components/object-preview/object-preview.component.d.ts +37 -0
  104. package/lib/components/object-properties/object-properties.component.d.ts +45 -0
  105. package/lib/components/object-properties/object-properties.interface.d.ts +21 -0
  106. package/lib/components/object-properties-group/object-properties-group.component.d.ts +11 -0
  107. package/lib/components/object-properties-group/object-property-value/object-property-value.component.d.ts +14 -0
  108. package/lib/components/object-properties-header/object-properties-header.component.d.ts +5 -3
  109. package/lib/components/object-properties-header/object-properties-header.interface.d.ts +1 -0
  110. package/lib/pipes/bit-converter.pipe.d.ts +17 -0
  111. package/lib/pipes/get-attribute-value.pipe.d.ts +23 -0
  112. package/lib/pipes/round.pipe.d.ts +7 -0
  113. package/lib/utils/objectProperties.d.ts +2 -0
  114. package/package.json +12 -4
  115. package/public-api.d.ts +17 -0
@@ -0,0 +1,327 @@
1
+ import { Component, Input, signal, ViewEncapsulation } from '@angular/core';
2
+ import { BimplusOverlayDialogDeleteComponent } from '../bimplus-overlay-dialog-delete/bimplus-overlay-dialog-delete.component';
3
+ import { TranslateModule } from '@ngx-translate/core';
4
+ import { AsyncPipe, DatePipe, NgFor } from '@angular/common';
5
+ import { BimplusTextareaComponent } from '../bimplus-textarea/bimplus-textarea.component';
6
+ import { BimplusCommentComponent } from '../bimplus-comment/bimplus-comment.component';
7
+ import { BimplusButtonsRowComponent } from '../bimplus-buttons-row/bimplus-buttons-row.component';
8
+ import { BimplusLocalizedWidgetComponent } from '../bimplus-localized-widget/bimplus-localized-widget.component';
9
+ import { BimplusScrollableContainerComponent } from '../bimplus-scrollable-container/bimplus-scrollable-container.component';
10
+ import { BimplusInputTextFieldComponent } from "../bimplus-input-text-field/bimplus-input-text-field.component";
11
+ import { FormsModule, ReactiveFormsModule, Validators } from "@angular/forms";
12
+ import { BimplusAttachmentsComponent } from '../bimplus-attachments/bimplus-attachments.component';
13
+ import { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';
14
+ import { BIMPLUS_ATTACHMENTS_CONFIG, } from '../bimplus-attachments/bimplus-attachments.interface';
15
+ import { BehaviorSubject, switchMap } from 'rxjs';
16
+ import { BimplusObjectCommentsListService } from './bimplus-object-comments-list.service';
17
+ import { LinksToDocumentsComponent } from '../links-to-documents/links-to-documents.component';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../bimplus-general-overlay-dialog/bimplus-general-overlay-dialog.service";
20
+ import * as i2 from "@ngx-translate/core";
21
+ import * as i3 from "@angular/common";
22
+ import * as i4 from "@angular/forms";
23
+ import * as i5 from "../bimplus-attachments/services/bimplus-attachments.service";
24
+ import * as i6 from "./bimplus-object-comments-list.service";
25
+ const config = {
26
+ showNoAttachmentsFound: false,
27
+ hideAttachmentSize: true,
28
+ };
29
+ export class BimplusObjectCommentsListComponent extends BimplusLocalizedWidgetComponent {
30
+ set rootObjectId(id) {
31
+ this._rootObjectId = id;
32
+ }
33
+ get rootObjectId() {
34
+ return this._rootObjectId;
35
+ }
36
+ set userId(id) {
37
+ this._userId = id;
38
+ }
39
+ get userId() {
40
+ return this._userId;
41
+ }
42
+ constructor(dialogService, translateService, datePipe, formBuilder, bimplusAttachmentsService, bimplusObjectCommentsListService) {
43
+ super(translateService);
44
+ this.dialogService = dialogService;
45
+ this.datePipe = datePipe;
46
+ this.formBuilder = formBuilder;
47
+ this.bimplusAttachmentsService = bimplusAttachmentsService;
48
+ this.bimplusObjectCommentsListService = bimplusObjectCommentsListService;
49
+ this.project = null;
50
+ this.wormholeSelector = "localEmbeddedModalId";
51
+ this.env = "prod";
52
+ this.attachmentLinkItems = [];
53
+ this.commentsList$ = new BehaviorSubject([]);
54
+ this.loading = signal(false);
55
+ this.attachmentsState = signal([]);
56
+ this.buttonRowItems = [];
57
+ this.hyperlinkButtonRowItems = [];
58
+ this.textAreaValue = null;
59
+ this.lastShownDate = '';
60
+ this.placeholder = '';
61
+ this.name = '';
62
+ this.readonly = false;
63
+ this.autoResizeTextarea = true;
64
+ this.minRows = 3;
65
+ this.maxRows = 10;
66
+ this.clearValue = false;
67
+ // attachment ids ready to map to concrete comment
68
+ this.newAttachmentIDs = [];
69
+ this.isAddingHyperlink = false;
70
+ this.intermediateHyperlinks = [];
71
+ this._rootObjectId = '';
72
+ this._userId = '';
73
+ this.hyperlinkForm = this.formBuilder.group({
74
+ name: ['', []],
75
+ url: [
76
+ '',
77
+ [
78
+ Validators.required,
79
+ Validators.pattern(/^[^<>]*$/), // Do not allow < or >
80
+ Validators.pattern(/^(?!\s*$).+/), // Do not allow all empty string, but allow text after spaces
81
+ ],
82
+ ],
83
+ });
84
+ }
85
+ ngOnInit() {
86
+ this.bimplusObjectCommentsListService.api = this.api;
87
+ this.loadComments();
88
+ const submit = [
89
+ {
90
+ id: 'submit',
91
+ title: this.translateService.instant('_Add comment'),
92
+ tooltip: this.translateService.instant('_Add comment'),
93
+ disabled: !this.textAreaValue,
94
+ buttonStyle: 'primary',
95
+ },
96
+ ];
97
+ this.placeholder = this.translateService.instant('_Place comment text here');
98
+ this.name = this.translateService.instant('comment');
99
+ this.buttonRowItems = submit;
100
+ this.hyperlinkButtonRowItems.push({
101
+ id: 'cancel-hyperlink',
102
+ title: this.translateService.instant('_Cancel'),
103
+ tooltip: this.translateService.instant('_Cancel'),
104
+ disabled: false,
105
+ buttonStyle: 'primary',
106
+ }, {
107
+ id: 'add-hyperlink',
108
+ title: this.translateService.instant('_Add hyperlink'),
109
+ tooltip: this.translateService.instant('_Add hyperlink'),
110
+ disabled: true,
111
+ buttonStyle: 'primary',
112
+ });
113
+ this.hyperlinkForm.statusChanges.subscribe((status) => {
114
+ this.hyperlinkButtonRowItems[1].disabled = status !== 'VALID';
115
+ });
116
+ }
117
+ onAttachmentsChange(newAttachmentIDs) {
118
+ this.newAttachmentIDs = [...this.newAttachmentIDs, ...newAttachmentIDs];
119
+ }
120
+ onAddAttachment(file) {
121
+ const attachment = this.bimplusAttachmentsService.getAttachment(file);
122
+ this.attachmentsState.update(attachments => ([...attachments, attachment]));
123
+ }
124
+ onDeleteAttachment(attachment) {
125
+ this.attachmentsState.update(attachments => attachments.filter(a => a !== attachment));
126
+ }
127
+ /** Event on click attachment. */
128
+ onGetAttachment(attachment) {
129
+ this.bimplusObjectCommentsListService.downloadAttachment(attachment);
130
+ }
131
+ onTextareaValueChange(value) {
132
+ this.textAreaValue = value;
133
+ this.buttonRowItems[0].disabled = !value;
134
+ }
135
+ handleActionCommentEvent(event) {
136
+ if (event.action === 'delete') {
137
+ const data = event.data;
138
+ this.openDialogDeleteComment(data.commentId);
139
+ }
140
+ }
141
+ actionDialogClose(data) {
142
+ this.dialogService.close(data);
143
+ }
144
+ openDialogDeleteComment(commentId) {
145
+ this.dialogService.open(BimplusOverlayDialogDeleteComponent, {
146
+ options: {
147
+ position: 'middle',
148
+ positionOptions: {},
149
+ overlayClickEnabled: false,
150
+ overlayVisibilityEnabled: true,
151
+ draggable: true,
152
+ },
153
+ data: {
154
+ title: this.translateService.instant('_Comment delete confirmation title'),
155
+ message: this.translateService.instant('_Comment delete confirmation message'),
156
+ acceptCallback: () => {
157
+ this.deleteComment(commentId);
158
+ },
159
+ },
160
+ });
161
+ }
162
+ isSameDate(date) {
163
+ if (!date) {
164
+ return false;
165
+ }
166
+ const time = this.datePipe.transform(date, 'shortDate');
167
+ if (this.lastShownDate === time) {
168
+ return false;
169
+ }
170
+ this.lastShownDate = date;
171
+ return true;
172
+ }
173
+ buttonRowButtonClicked($event) {
174
+ if ($event.id === 'submit') {
175
+ if (!this.api || !this.rootObjectId)
176
+ return;
177
+ this.loading.set(true);
178
+ const data = {
179
+ text: this.textAreaValue,
180
+ objectId: this.rootObjectId,
181
+ };
182
+ const dataText = JSON.stringify(data);
183
+ this.bimplusObjectCommentsListService.postComments(this.rootObjectId, dataText, this.getHyperlinks(this.rootObjectId), this.attachmentsState(), this.newAttachmentIDs)
184
+ .pipe(switchMap(() => this.bimplusObjectCommentsListService.loadComments(this.rootObjectId)))
185
+ .subscribe({
186
+ next: (comments) => this.commentsList$.next(comments),
187
+ complete: () => {
188
+ this.attachmentsState.set([]);
189
+ this.intermediateHyperlinks = [];
190
+ this.textAreaValue = null;
191
+ this.clearValue = true;
192
+ this.buttonRowItems[0].disabled = true;
193
+ this.loading.set(false);
194
+ }
195
+ });
196
+ }
197
+ }
198
+ hyperlinkButtonRowButtonClicked($event) {
199
+ if ($event.id === 'add-hyperlink') {
200
+ this.addIntermediateHyperlink();
201
+ }
202
+ else if ($event.id === 'cancel-hyperlink') {
203
+ this.hyperlinkForm.reset();
204
+ this.isAddingHyperlink = false;
205
+ }
206
+ }
207
+ addIntermediateHyperlink() {
208
+ if (!this.hyperlinkForm.valid) {
209
+ return;
210
+ }
211
+ let sanitizedUrl = this.hyperlinkForm.value['url'].trim();
212
+ if (!RegExp(/^http(s?):\/\//).exec(sanitizedUrl)) {
213
+ sanitizedUrl = 'https://' + sanitizedUrl;
214
+ }
215
+ let sanitizedName = this.hyperlinkForm.value['name']?.trim() ?? '';
216
+ if (sanitizedName === '') {
217
+ sanitizedName = sanitizedUrl;
218
+ }
219
+ sanitizedName = sanitizedName?.replace(/^http(s?):\/\//, '');
220
+ this.intermediateHyperlinks.push({
221
+ name: sanitizedName,
222
+ url: sanitizedUrl,
223
+ });
224
+ this.hyperlinkForm.reset();
225
+ this.isAddingHyperlink = false;
226
+ }
227
+ deleteComment(commentId) {
228
+ this.bimplusObjectCommentsListService.deleteComment(commentId)
229
+ .subscribe(() => this.loadComments());
230
+ }
231
+ addHyperlinkIconClicked() {
232
+ this.isAddingHyperlink = !this.isAddingHyperlink;
233
+ }
234
+ addHyperlinkIconKeypress(event) {
235
+ if (event.key === 'Enter' || event.key === ' ') {
236
+ this.addHyperlinkIconClicked();
237
+ }
238
+ }
239
+ removeIntermediateHyperlink(link) {
240
+ this.intermediateHyperlinks = this.intermediateHyperlinks.filter((hyperlink) => hyperlink !== link);
241
+ }
242
+ removeIntermediateHyperlinkKeypress(event, link) {
243
+ if (event.key === 'Enter' || event.key === ' ') {
244
+ this.removeIntermediateHyperlink(link);
245
+ }
246
+ }
247
+ isActUserAuthor(item) {
248
+ return item.author?.id === this.userId;
249
+ }
250
+ displayName(item) {
251
+ return item.author?.displayname ? item.author?.displayname : '';
252
+ }
253
+ formatDate(date) {
254
+ const locale = window.navigator.language;
255
+ if (locale.includes('en')) {
256
+ const unformattedDate = new Date(date);
257
+ return unformattedDate.getMonth() + '/' + unformattedDate.getDate() + '/' + unformattedDate.getFullYear();
258
+ }
259
+ return new Intl.DateTimeFormat(undefined, { dateStyle: "short" }).format(new Date(date));
260
+ }
261
+ clearTextareaValue() {
262
+ return this.clearValue;
263
+ }
264
+ loadComments() {
265
+ this.loading.set(true);
266
+ this.bimplusObjectCommentsListService
267
+ .loadComments(this.rootObjectId)
268
+ .subscribe({
269
+ next: comments => this.commentsList$.next(comments),
270
+ complete: () => this.loading.set(false)
271
+ });
272
+ }
273
+ getHyperlinks(objectId) {
274
+ return this.intermediateHyperlinks.map((h) => ({
275
+ ...h,
276
+ objectId,
277
+ }));
278
+ }
279
+ onEnterKeyPressedInHyperlinkForm() {
280
+ this.addIntermediateHyperlink();
281
+ }
282
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BimplusObjectCommentsListComponent, deps: [{ token: i1.DialogService }, { token: i2.TranslateService }, { token: i3.DatePipe }, { token: i4.FormBuilder }, { token: i5.BimplusAttachmentsService }, { token: i6.BimplusObjectCommentsListService }], target: i0.ɵɵFactoryTarget.Component }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: BimplusObjectCommentsListComponent, isStandalone: true, selector: "lib-bimplus-object-comments-list", inputs: { api: "api", project: "project", wormholeSelector: "wormholeSelector", env: "env", attachmentLinkItems: "attachmentLinkItems", rootObjectId: "rootObjectId", userId: "userId" }, providers: [
284
+ DatePipe,
285
+ BimplusObjectCommentsListService,
286
+ BimplusAttachmentsService,
287
+ { provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config },
288
+ ], usesInheritance: true, ngImport: i0, template: "@if (!loading()) {\r\n<div class=\"comment-tab-container\">\r\n <div class=\"textarea-container\">\r\n <lib-bimplus-textarea\r\n (textAreaValueChange)=\"onTextareaValueChange($event)\"\r\n [placeholder]=\"placeholder\"\r\n [name]=\"name\"\r\n [readonly]=\"readonly\"\r\n [activeAutoResizeTextarea]=\"true\"\r\n [minRows]=\"minRows\"\r\n [maxRows]=\"maxRows\"\r\n [clearValue]=\"clearTextareaValue()\"\r\n ></lib-bimplus-textarea>\r\n </div>\r\n\r\n <lib-bimplus-attachments\r\n #attachments\r\n listOnly\r\n [attachments]=\"attachmentsState()\"\r\n (addAttachment)=\"onAddAttachment($event)\"\r\n (deleteAttachment)=\"onDeleteAttachment($event)\"\r\n />\r\n\r\n <lib-links-to-documents \r\n #linksToDocuments\r\n listOnly\r\n hideAttachmentSize\r\n showEmptyMessage=\"false\" \r\n [attachments]=\"attachmentLinkItems\"\r\n (attachmentsChange)=\"onAttachmentsChange($event)\"\r\n [api]=\"api\" \r\n [project]=\"project\"\r\n [rootObjectId]=\"rootObjectId\"\r\n [canCreateAttachmentLink]=\"true\"\r\n [canDeleteAttachmentLink]=\"true\"\r\n [wormholeSelector]=\"wormholeSelector\"\r\n [env]=\"env\"\r\n />\r\n\r\n @if (intermediateHyperlinks.length) {\r\n <div class=\"intermediate-hyperlinks-list\">\r\n <div *ngFor=\"let link of intermediateHyperlinks\" class=\"intermediate-hyperlink\" title=\"{{ link.url }}\">\r\n <div class=\"link-icon icon-small\" title=\"{{ link.url }}\"></div>\r\n <div class=\"text\">{{ link.name }}</div>\r\n <span class=\"cancel-icon\" title=\"{{ '_Hyperlink delete confirmation title' | translate }}\" (click)=\"removeIntermediateHyperlink(link)\" (keydown)=\"removeIntermediateHyperlinkKeypress($event, link)\"></span>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (isAddingHyperlink) {\r\n <form [formGroup]=\"hyperlinkForm\" class=\"hyperlink-input-form\">\r\n <div class=\"hyperlink-input-row\">\r\n <div class=\"link-icon icon-next-to-text-input\"></div>\r\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\r\n </div>\r\n <div class=\"hyperlink-input-row\">\r\n <div class=\"icon-next-to-text-input\"></div>\r\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\r\n </div>\r\n\r\n <lib-bimplus-buttons-row [items]=\"hyperlinkButtonRowItems\" (buttonClicked)=\"hyperlinkButtonRowButtonClicked($event)\"/>\r\n </form>\r\n }\r\n\r\n <div class=\"comments-tab-attachments-section\">\r\n <div class=\"comments-attachments-list\">\r\n <div class=\"tab-attachments icon attachments-icon hidden\"></div>\r\n <div class=\"attachment-icon icon-small interactive\" [title]=\"'_Add attachment' | translate\" (click)=\"attachments.open()\" (keydown)=\"attachments.open()\"></div>\r\n <div class=\"link-icon icon-small interactive\" [title]=\"'_Add hyperlink' | translate\" (click)=\"addHyperlinkIconClicked()\" (keydown)=\"addHyperlinkIconKeypress($event)\"></div>\r\n <div class=\"link-document-icon icon-small interactive\" [title]=\"'_Add_attachment_link' | translate\" (click)=\"linksToDocuments.createAttachmentLink(api!)\" (keydown)=\"linksToDocuments.createAttachmentLink(api!)\"></div>\r\n <div class=\"tab-attachmentlinks icon attachments-icon hidden\"></div>\r\n </div>\r\n <div class=\"add-comment\">\r\n <lib-bimplus-buttons-row\r\n [items]=\"buttonRowItems\"\r\n (buttonClicked)=\"buttonRowButtonClicked($event)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"comments-separator\"></div>\r\n\r\n <div class=\"scrollable-content-container\">\r\n <lib-bimplus-scrollable-container>\r\n @for (item of commentsList$ | async; track item) {\r\n @if(item.createdAt && isSameDate(item.createdAt))\r\n {\r\n <div class=\"comment-list-date\">\r\n {{formatDate(item.createdAt)}}\r\n </div>\r\n }\r\n <lib-bimplus-comment\r\n (outputActionCommentEvent)=\"handleActionCommentEvent($event)\"\r\n (getAttachment)=\"onGetAttachment($event)\"\r\n [message]=\"item.text\"\r\n [date]=\"item.createdAt ? item.createdAt : ''\"\r\n action=\"delete\"\r\n [commentId]=\"item.id\"\r\n [attachments]=\"item.attachments ?? []\"\r\n [attachmentLinkItems]=\"item.attachmentLinks ?? []\"\r\n [hyperlinks]=\"item.hyperlinks\"\r\n [isActUserAuthor]=\"isActUserAuthor(item)\"\r\n [displayname]=\"displayName(item)\">\r\n </lib-bimplus-comment>\r\n }\r\n </lib-bimplus-scrollable-container>\r\n </div>\r\n\r\n</div>\r\n\r\n} @else{\r\n<div data-test=\"loading\">{{'_Loading' | translate}}</div>\r\n}\r\n", styles: [":host{height:100%;display:flex;flex-direction:column;flex:1}.link-icon{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" viewBox=\"0 0 18 18\" xml:space=\"preserve\"><style>.st0{fill:%23444}<\\/style><path class=\"st0\" d=\"M16.7 4.2l-1.3-1.3c-1.2-1.2-3.2-1.2-4.4 0l-.6.6 1.1 1.1.7-.6c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-4.1 4.1c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.5-.6-1.4-.1-2L6.9 7.1c-1.1 1.2-1.1 3.1.1 4.3l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l4.1-4.1c1.1-1.2 1.1-3.2-.1-4.4z\"/><path class=\"st0\" d=\"M5.8 13c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.6-.6-1.5 0-2.1l4.1-4.1c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-.6.6 1.1 1.1.6-.6c1.2-1.2 1.2-3.2 0-4.4L9.8 4.3c-1.2-1.2-3.2-1.2-4.4 0L1.3 8.4c-1.2 1.2-1.2 3.2 0 4.4l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l.6-.6-1.1-1.1-.7.6z\"/></svg>') no-repeat center}.attachment-icon{background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>') no-repeat center}.link-document-icon{background:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A') no-repeat center}.icon{height:2rem;width:2rem;margin:0 .2rem}.icon-small{height:100%;width:1.8rem;margin:0 .2rem}.icon-next-to-text-input{width:1.8rem;margin:.3rem .2rem 0}.interactive{cursor:pointer}.flex{display:flex}.flex-grow{flex-grow:1}.hyperlink-input-row{display:flex;gap:.2rem}.intermediate-hyperlinks-list{margin:0 .6rem .2rem 0}.intermediate-hyperlink{padding-left:.8rem;display:grid;grid-template-columns:auto 1fr auto;column-gap:.4rem}.intermediate-hyperlink .text{line-height:2.4rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.intermediate-hyperlink .cancel-icon{flex:1;background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;width:3.2rem;max-width:3.2rem;cursor:pointer}.hyperlink-input-form{padding-left:.8rem;padding-right:.8rem;display:flex;flex-direction:column;gap:.2rem}.comment-tab-container{height:100%;display:flex;flex-direction:column;flex:1}.comment-tab-container .scrollable-content-container{position:relative;flex:1;width:100%}.comment-tab-container .scrollable-content-container lib-bimplus-scrollable-container{position:absolute;top:0;bottom:0;flex:1;width:100%}.comment-tab-container .textarea-container{margin-left:.8rem}.comment-tab-container .comments-tab-attachments-section{display:inline-flex;width:100%;justify-content:space-between;margin:1rem .8rem .8rem 0}.comment-tab-container .comments-tab-attachments-section .comments-attachments-list{align-items:center;margin-left:.8rem}.comment-tab-container .comments-tab-attachments-section .add-comment{display:inline-flex;align-items:center;margin-right:.8rem}.comment-tab-container .comments-attachments-list{display:inline-flex}.comment-tab-container .comments-attachments-list .attachments-icon{height:2rem;width:2rem;margin:0 .2rem;cursor:pointer}.comment-tab-container .comments-attachments-list .tab-attachments{background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>') no-repeat center}.comment-tab-container .comments-attachments-list .tab-attachmentlinks{background:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A') no-repeat center}.comment-tab-container .comments-attachments-list .tab-hyperlinks{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" viewBox=\"0 0 18 18\" xml:space=\"preserve\"><style>.st0{fill:%23444}<\\/style><path class=\"st0\" d=\"M16.7 4.2l-1.3-1.3c-1.2-1.2-3.2-1.2-4.4 0l-.6.6 1.1 1.1.7-.6c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-4.1 4.1c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.5-.6-1.4-.1-2L6.9 7.1c-1.1 1.2-1.1 3.1.1 4.3l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l4.1-4.1c1.1-1.2 1.1-3.2-.1-4.4z\"/><path class=\"st0\" d=\"M5.8 13c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.6-.6-1.5 0-2.1l4.1-4.1c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-.6.6 1.1 1.1.6-.6c1.2-1.2 1.2-3.2 0-4.4L9.8 4.3c-1.2-1.2-3.2-1.2-4.4 0L1.3 8.4c-1.2 1.2-1.2 3.2 0 4.4l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l.6-.6-1.1-1.1-.7.6z\"/></svg>') no-repeat center}.comment-tab-container .comments-separator{margin:0 .8rem .8rem;border-bottom:solid .1rem var(--comments-chat-comments-separator-border-color)}.comment-tab-container textarea::-webkit-scrollbar-track{background-color:var(--main-menu-apps-container-background-color-enabled)}.comment-tab-container textarea::-webkit-scrollbar-thumb{background-color:var(--propertymanager-object-tree-scrollable-border-color);border-radius:5px}.comment-tab-container textarea::-webkit-scrollbar{width:7px;background:var(--storage-info-placeholder-text-color-enabled)}.comment-tab-container .comment-list-date{text-align:center}.comment-tab-container .hidden{display:none}lib-bimplus-attachments{--bim-attachment-item-border-bottom: none;--bim-attachment-delete-button-icon-color: #444;--bim-attachment-delete-button-icon-font-weight: bold;--bim-attachment-item-background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>')}lib-links-to-documents{--attachment-row-border-bottom: none;--bim-attachment-item-background-image: url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A');--bim-attachment-delete-button: #444;--attachment-row-margin: 0;--bim-attachment-item-background-size: 1.8rem;--bim-attachment-delete-button-font-weight: bold}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: BimplusTextareaComponent, selector: "lib-bimplus-textarea", inputs: ["name", "placeholder", "readonly", "required", "minRows", "maxRows", "activeAutoResizeTextarea", "clearValue", "rows"], outputs: ["textAreaValueChange"] }, { kind: "component", type: BimplusCommentComponent, selector: "lib-bimplus-comment", inputs: ["attachmentLinkItems", "message", "date", "action", "commentId", "isActUserAuthor", "displayname", "hyperlinks", "attachments"], outputs: ["outputActionCommentEvent", "getAttachment"] }, { kind: "component", type: BimplusButtonsRowComponent, selector: "lib-bimplus-buttons-row", inputs: ["items"], outputs: ["fileChanged", "buttonClicked"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: BimplusScrollableContainerComponent, selector: "lib-bimplus-scrollable-container" }, { kind: "component", type: BimplusInputTextFieldComponent, selector: "lib-bimplus-input-text-field", inputs: ["placeholder"], outputs: ["enterKeyPressed"] }, { kind: "component", type: BimplusAttachmentsComponent, selector: "lib-bimplus-attachments", inputs: ["attachments", "closeIconTemplate", "listOnly"], outputs: ["deleteAttachment", "addAttachment", "getAttachment"] }, { kind: "component", type: LinksToDocumentsComponent, selector: "lib-links-to-documents", inputs: ["api", "canCreateAttachmentLink", "listOnly", "showEmptyMessage", "hideAttachmentSize", "attachments", "canDeleteAttachmentLink", "project", "wormholeSelector", "env", "rootObjectId"], outputs: ["attachmentsChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
289
+ }
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BimplusObjectCommentsListComponent, decorators: [{
291
+ type: Component,
292
+ args: [{ selector: 'lib-bimplus-object-comments-list', imports: [
293
+ NgFor,
294
+ BimplusTextareaComponent,
295
+ BimplusCommentComponent,
296
+ BimplusButtonsRowComponent,
297
+ TranslateModule,
298
+ BimplusScrollableContainerComponent,
299
+ BimplusInputTextFieldComponent,
300
+ BimplusAttachmentsComponent,
301
+ LinksToDocumentsComponent,
302
+ FormsModule,
303
+ ReactiveFormsModule,
304
+ AsyncPipe,
305
+ ], providers: [
306
+ DatePipe,
307
+ BimplusObjectCommentsListService,
308
+ BimplusAttachmentsService,
309
+ { provide: BIMPLUS_ATTACHMENTS_CONFIG, useValue: config },
310
+ ], standalone: true, encapsulation: ViewEncapsulation.ShadowDom, template: "@if (!loading()) {\r\n<div class=\"comment-tab-container\">\r\n <div class=\"textarea-container\">\r\n <lib-bimplus-textarea\r\n (textAreaValueChange)=\"onTextareaValueChange($event)\"\r\n [placeholder]=\"placeholder\"\r\n [name]=\"name\"\r\n [readonly]=\"readonly\"\r\n [activeAutoResizeTextarea]=\"true\"\r\n [minRows]=\"minRows\"\r\n [maxRows]=\"maxRows\"\r\n [clearValue]=\"clearTextareaValue()\"\r\n ></lib-bimplus-textarea>\r\n </div>\r\n\r\n <lib-bimplus-attachments\r\n #attachments\r\n listOnly\r\n [attachments]=\"attachmentsState()\"\r\n (addAttachment)=\"onAddAttachment($event)\"\r\n (deleteAttachment)=\"onDeleteAttachment($event)\"\r\n />\r\n\r\n <lib-links-to-documents \r\n #linksToDocuments\r\n listOnly\r\n hideAttachmentSize\r\n showEmptyMessage=\"false\" \r\n [attachments]=\"attachmentLinkItems\"\r\n (attachmentsChange)=\"onAttachmentsChange($event)\"\r\n [api]=\"api\" \r\n [project]=\"project\"\r\n [rootObjectId]=\"rootObjectId\"\r\n [canCreateAttachmentLink]=\"true\"\r\n [canDeleteAttachmentLink]=\"true\"\r\n [wormholeSelector]=\"wormholeSelector\"\r\n [env]=\"env\"\r\n />\r\n\r\n @if (intermediateHyperlinks.length) {\r\n <div class=\"intermediate-hyperlinks-list\">\r\n <div *ngFor=\"let link of intermediateHyperlinks\" class=\"intermediate-hyperlink\" title=\"{{ link.url }}\">\r\n <div class=\"link-icon icon-small\" title=\"{{ link.url }}\"></div>\r\n <div class=\"text\">{{ link.name }}</div>\r\n <span class=\"cancel-icon\" title=\"{{ '_Hyperlink delete confirmation title' | translate }}\" (click)=\"removeIntermediateHyperlink(link)\" (keydown)=\"removeIntermediateHyperlinkKeypress($event, link)\"></span>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (isAddingHyperlink) {\r\n <form [formGroup]=\"hyperlinkForm\" class=\"hyperlink-input-form\">\r\n <div class=\"hyperlink-input-row\">\r\n <div class=\"link-icon icon-next-to-text-input\"></div>\r\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"name\" placeholder=\"{{ '_Name' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\r\n </div>\r\n <div class=\"hyperlink-input-row\">\r\n <div class=\"icon-next-to-text-input\"></div>\r\n <lib-bimplus-input-text-field class=\"flex-grow\" formControlName=\"url\" placeholder=\"{{ '_URL' | translate }}\" (enterKeyPressed)=\"onEnterKeyPressedInHyperlinkForm()\"/>\r\n </div>\r\n\r\n <lib-bimplus-buttons-row [items]=\"hyperlinkButtonRowItems\" (buttonClicked)=\"hyperlinkButtonRowButtonClicked($event)\"/>\r\n </form>\r\n }\r\n\r\n <div class=\"comments-tab-attachments-section\">\r\n <div class=\"comments-attachments-list\">\r\n <div class=\"tab-attachments icon attachments-icon hidden\"></div>\r\n <div class=\"attachment-icon icon-small interactive\" [title]=\"'_Add attachment' | translate\" (click)=\"attachments.open()\" (keydown)=\"attachments.open()\"></div>\r\n <div class=\"link-icon icon-small interactive\" [title]=\"'_Add hyperlink' | translate\" (click)=\"addHyperlinkIconClicked()\" (keydown)=\"addHyperlinkIconKeypress($event)\"></div>\r\n <div class=\"link-document-icon icon-small interactive\" [title]=\"'_Add_attachment_link' | translate\" (click)=\"linksToDocuments.createAttachmentLink(api!)\" (keydown)=\"linksToDocuments.createAttachmentLink(api!)\"></div>\r\n <div class=\"tab-attachmentlinks icon attachments-icon hidden\"></div>\r\n </div>\r\n <div class=\"add-comment\">\r\n <lib-bimplus-buttons-row\r\n [items]=\"buttonRowItems\"\r\n (buttonClicked)=\"buttonRowButtonClicked($event)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"comments-separator\"></div>\r\n\r\n <div class=\"scrollable-content-container\">\r\n <lib-bimplus-scrollable-container>\r\n @for (item of commentsList$ | async; track item) {\r\n @if(item.createdAt && isSameDate(item.createdAt))\r\n {\r\n <div class=\"comment-list-date\">\r\n {{formatDate(item.createdAt)}}\r\n </div>\r\n }\r\n <lib-bimplus-comment\r\n (outputActionCommentEvent)=\"handleActionCommentEvent($event)\"\r\n (getAttachment)=\"onGetAttachment($event)\"\r\n [message]=\"item.text\"\r\n [date]=\"item.createdAt ? item.createdAt : ''\"\r\n action=\"delete\"\r\n [commentId]=\"item.id\"\r\n [attachments]=\"item.attachments ?? []\"\r\n [attachmentLinkItems]=\"item.attachmentLinks ?? []\"\r\n [hyperlinks]=\"item.hyperlinks\"\r\n [isActUserAuthor]=\"isActUserAuthor(item)\"\r\n [displayname]=\"displayName(item)\">\r\n </lib-bimplus-comment>\r\n }\r\n </lib-bimplus-scrollable-container>\r\n </div>\r\n\r\n</div>\r\n\r\n} @else{\r\n<div data-test=\"loading\">{{'_Loading' | translate}}</div>\r\n}\r\n", styles: [":host{height:100%;display:flex;flex-direction:column;flex:1}.link-icon{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" viewBox=\"0 0 18 18\" xml:space=\"preserve\"><style>.st0{fill:%23444}<\\/style><path class=\"st0\" d=\"M16.7 4.2l-1.3-1.3c-1.2-1.2-3.2-1.2-4.4 0l-.6.6 1.1 1.1.7-.6c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-4.1 4.1c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.5-.6-1.4-.1-2L6.9 7.1c-1.1 1.2-1.1 3.1.1 4.3l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l4.1-4.1c1.1-1.2 1.1-3.2-.1-4.4z\"/><path class=\"st0\" d=\"M5.8 13c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.6-.6-1.5 0-2.1l4.1-4.1c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-.6.6 1.1 1.1.6-.6c1.2-1.2 1.2-3.2 0-4.4L9.8 4.3c-1.2-1.2-3.2-1.2-4.4 0L1.3 8.4c-1.2 1.2-1.2 3.2 0 4.4l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l.6-.6-1.1-1.1-.7.6z\"/></svg>') no-repeat center}.attachment-icon{background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>') no-repeat center}.link-document-icon{background:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A') no-repeat center}.icon{height:2rem;width:2rem;margin:0 .2rem}.icon-small{height:100%;width:1.8rem;margin:0 .2rem}.icon-next-to-text-input{width:1.8rem;margin:.3rem .2rem 0}.interactive{cursor:pointer}.flex{display:flex}.flex-grow{flex-grow:1}.hyperlink-input-row{display:flex;gap:.2rem}.intermediate-hyperlinks-list{margin:0 .6rem .2rem 0}.intermediate-hyperlink{padding-left:.8rem;display:grid;grid-template-columns:auto 1fr auto;column-gap:.4rem}.intermediate-hyperlink .text{line-height:2.4rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.intermediate-hyperlink .cancel-icon{flex:1;background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" width=\"18\" height=\"18\" xml:space=\"preserve\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" fill=\"%23444\" d=\"M13.5 5.4L12.1 4 8.5 7.6 4.9 4 3.5 5.4 7.1 9l-3.6 3.6L4.9 14l3.6-3.6 3.6 3.6 1.4-1.4L9.9 9z\"/></svg>%0D%0A') no-repeat center;background-size:1.8rem;width:3.2rem;max-width:3.2rem;cursor:pointer}.hyperlink-input-form{padding-left:.8rem;padding-right:.8rem;display:flex;flex-direction:column;gap:.2rem}.comment-tab-container{height:100%;display:flex;flex-direction:column;flex:1}.comment-tab-container .scrollable-content-container{position:relative;flex:1;width:100%}.comment-tab-container .scrollable-content-container lib-bimplus-scrollable-container{position:absolute;top:0;bottom:0;flex:1;width:100%}.comment-tab-container .textarea-container{margin-left:.8rem}.comment-tab-container .comments-tab-attachments-section{display:inline-flex;width:100%;justify-content:space-between;margin:1rem .8rem .8rem 0}.comment-tab-container .comments-tab-attachments-section .comments-attachments-list{align-items:center;margin-left:.8rem}.comment-tab-container .comments-tab-attachments-section .add-comment{display:inline-flex;align-items:center;margin-right:.8rem}.comment-tab-container .comments-attachments-list{display:inline-flex}.comment-tab-container .comments-attachments-list .attachments-icon{height:2rem;width:2rem;margin:0 .2rem;cursor:pointer}.comment-tab-container .comments-attachments-list .tab-attachments{background:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>') no-repeat center}.comment-tab-container .comments-attachments-list .tab-attachmentlinks{background:url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A') no-repeat center}.comment-tab-container .comments-attachments-list .tab-hyperlinks{background:url('data:image/svg+xml,<svg version=\"1.1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\" x=\"0\" y=\"0\" viewBox=\"0 0 18 18\" xml:space=\"preserve\"><style>.st0{fill:%23444}<\\/style><path class=\"st0\" d=\"M16.7 4.2l-1.3-1.3c-1.2-1.2-3.2-1.2-4.4 0l-.6.6 1.1 1.1.7-.6c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-4.1 4.1c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.5-.6-1.4-.1-2L6.9 7.1c-1.1 1.2-1.1 3.1.1 4.3l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l4.1-4.1c1.1-1.2 1.1-3.2-.1-4.4z\"/><path class=\"st0\" d=\"M5.8 13c-.6.6-1.5.6-2.1 0l-1.3-1.3c-.6-.6-.6-1.5 0-2.1l4.1-4.1c.6-.6 1.5-.6 2.1 0l1.3 1.3c.6.6.6 1.5 0 2.1l-.6.6 1.1 1.1.6-.6c1.2-1.2 1.2-3.2 0-4.4L9.8 4.3c-1.2-1.2-3.2-1.2-4.4 0L1.3 8.4c-1.2 1.2-1.2 3.2 0 4.4l1.3 1.3c1.2 1.2 3.2 1.2 4.4 0l.6-.6-1.1-1.1-.7.6z\"/></svg>') no-repeat center}.comment-tab-container .comments-separator{margin:0 .8rem .8rem;border-bottom:solid .1rem var(--comments-chat-comments-separator-border-color)}.comment-tab-container textarea::-webkit-scrollbar-track{background-color:var(--main-menu-apps-container-background-color-enabled)}.comment-tab-container textarea::-webkit-scrollbar-thumb{background-color:var(--propertymanager-object-tree-scrollable-border-color);border-radius:5px}.comment-tab-container textarea::-webkit-scrollbar{width:7px;background:var(--storage-info-placeholder-text-color-enabled)}.comment-tab-container .comment-list-date{text-align:center}.comment-tab-container .hidden{display:none}lib-bimplus-attachments{--bim-attachment-item-border-bottom: none;--bim-attachment-delete-button-icon-color: #444;--bim-attachment-delete-button-icon-font-weight: bold;--bim-attachment-item-background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\"><path d=\"M12 3v12H6V3h2v10h2V2.4C10 1.6 9.4 1 8.6 1H5.4C4.6 1 4 1.6 4 2.4v13.3c0 .7.6 1.3 1.4 1.3h7.3c.8 0 1.4-.6 1.4-1.4V3H12z\" fill=\"%23444\"/></svg>')}lib-links-to-documents{--attachment-row-border-bottom: none;--bim-attachment-item-background-image: url('data:image/svg+xml,<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">%0D%0A<path d=\"M4 8H8V6H4V8Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 3V5H12V3H4Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M4 11H8V9H4V11Z\" fill=\"%23444444\"/>%0D%0A<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1 0H15V10H13V2H3V16H10V18H1V0Z\" fill=\"%23444444\"/>%0D%0A<path d=\"M15.0198 11.9876V16.5C15.0198 16.7761 14.7959 17 14.5198 17H12.5C12.2239 17 12 16.7761 12 16.5V12.4938C12 12.2153 12.2277 11.9904 12.5062 11.9939C12.7799 11.9973 13 12.2201 13 12.4938V16H14V12.3913C14 11.5963 13.4456 11 12.6535 11H12.3861C11.5941 11 11 11.5963 11 12.3913V16.6087C11 17.4037 11.5941 18 12.3861 18H14.6139C15.4059 18 16 17.4037 16 16.6087V11.9876H15.0198Z\" fill=\"%23444444\"/>%0D%0A</svg>%0D%0A');--bim-attachment-delete-button: #444;--attachment-row-margin: 0;--bim-attachment-item-background-size: 1.8rem;--bim-attachment-delete-button-font-weight: bold}\n"] }]
311
+ }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.TranslateService }, { type: i3.DatePipe }, { type: i4.FormBuilder }, { type: i5.BimplusAttachmentsService }, { type: i6.BimplusObjectCommentsListService }], propDecorators: { api: [{
312
+ type: Input,
313
+ args: [{ required: true }]
314
+ }], project: [{
315
+ type: Input
316
+ }], wormholeSelector: [{
317
+ type: Input
318
+ }], env: [{
319
+ type: Input
320
+ }], attachmentLinkItems: [{
321
+ type: Input
322
+ }], rootObjectId: [{
323
+ type: Input
324
+ }], userId: [{
325
+ type: Input
326
+ }] } });
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmltcGx1cy1vYmplY3QtY29tbWVudHMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtYmltcGx1cy1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0L2JpbXBsdXMtb2JqZWN0LWNvbW1lbnRzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpbXBsdXMtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmltcGx1cy1vYmplY3QtY29tbWVudHMtbGlzdC9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBR3ZGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBRTdILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ2hI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QUN6QixXQUFXLDJZQUNYLG1CQUFtQiwyVUFDbkIsU0FBUzs7NEZBV0Esa0NBQWtDO2tCQTNCOUMsU0FBUzsrQkFDRSxrQ0FBa0MsV0FHbkM7d0JBQ1AsS0FBSzt3QkFDTCx3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsMEJBQTBCO3dCQUMxQixlQUFlO3dCQUNmLG1DQUFtQzt3QkFDbkMsOEJBQThCO3dCQUM5QiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFNBQVM7cUJBQ1YsYUFDVTt3QkFDVCxRQUFRO3dCQUNSLGdDQUFnQzt3QkFDaEMseUJBQXlCO3dCQUN6QixFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO3FCQUMxRCxjQUNXLElBQUksaUJBQ0QsaUJBQWlCLENBQUMsU0FBUzt5UEFRZixHQUFHO3NCQUE3QixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQXlCRixZQUFZO3NCQURmLEtBQUs7Z0JBVUYsTUFBTTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJpbXBsdXNPdmVybGF5RGlhbG9nRGVsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmltcGx1cy1vdmVybGF5LWRpYWxvZy1kZWxldGUvYmltcGx1cy1vdmVybGF5LWRpYWxvZy1kZWxldGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFzeW5jUGlwZSwgRGF0ZVBpcGUsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2JpbXBsdXMtZ2VuZXJhbC1vdmVybGF5LWRpYWxvZy9iaW1wbHVzLWdlbmVyYWwtb3ZlcmxheS1kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IEJpbXBsdXNUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gJy4uL2JpbXBsdXMtdGV4dGFyZWEvYmltcGx1cy10ZXh0YXJlYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCaW1wbHVzQ29tbWVudENvbXBvbmVudCB9IGZyb20gJy4uL2JpbXBsdXMtY29tbWVudC9iaW1wbHVzLWNvbW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IFdlYlNkayBmcm9tICdiaW1wbHVzLXdlYnNkayc7XHJcbmltcG9ydCB7IEJpbXBsdXNCdXR0b25DbGlja0V2ZW50LCBCaW1wbHVzQnV0dG9uUm93SXRlbSB9IGZyb20gJy4uL2JpbXBsdXMtYnV0dG9ucy1yb3cvYmltcGx1cy1idXR0b25zLXJvdy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBCaW1wbHVzQnV0dG9uc1Jvd0NvbXBvbmVudCB9IGZyb20gJy4uL2JpbXBsdXMtYnV0dG9ucy1yb3cvYmltcGx1cy1idXR0b25zLXJvdy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCaW1wbHVzTG9jYWxpemVkV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmltcGx1cy1sb2NhbGl6ZWQtd2lkZ2V0L2JpbXBsdXMtbG9jYWxpemVkLXdpZGdldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCaW1wbHVzU2Nyb2xsYWJsZUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2JpbXBsdXMtc2Nyb2xsYWJsZS1jb250YWluZXIvYmltcGx1cy1zY3JvbGxhYmxlLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tZW50RGF0YSwgQ29tbWVudE91dHB1dERhdGEsIElEaWFsb2dDb25maXJtQ2xvc2UgfSBmcm9tICcuL2JpbXBsdXNPYmplY3RDb21tZW50c0knO1xyXG5pbXBvcnQgeyBCaW1wbHVzSW5wdXRUZXh0RmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi4vYmltcGx1cy1pbnB1dC10ZXh0LWZpZWxkL2JpbXBsdXMtaW5wdXQtdGV4dC1maWVsZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQmltcGx1c0F0dGFjaG1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vYmltcGx1cy1hdHRhY2htZW50cy9iaW1wbHVzLWF0dGFjaG1lbnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJpbXBsdXNBdHRhY2htZW50c1NlcnZpY2UgfSBmcm9tICcuLi9iaW1wbHVzLWF0dGFjaG1lbnRzL3NlcnZpY2VzL2JpbXBsdXMtYXR0YWNobWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXR0YWNobWVudCxcclxuICBCSU1QTFVTX0FUVEFDSE1FTlRTX0NPTkZJRyxcclxuICBCaW1wbHVzQXR0YWNobWVudHNDb25maWcsXHJcbn0gZnJvbSAnLi4vYmltcGx1cy1hdHRhY2htZW50cy9iaW1wbHVzLWF0dGFjaG1lbnRzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbXBsdXNPYmplY3RDb21tZW50c0xpc3RTZXJ2aWNlIH0gZnJvbSAnLi9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaW5rc1RvRG9jdW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlua3MtdG8tZG9jdW1lbnRzL2xpbmtzLXRvLWRvY3VtZW50cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcm9qZWN0TmF2aWdhdG9yUHJvamVjdCB9IGZyb20gJy4uL3Byb2plY3QtbW9kZWxzL3Byb2plY3QtbW9kZWxzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRMaW5rSXRlbSB9IGZyb20gJy4uL2xpbmtzLXRvLWRvY3VtZW50cy9saW5rcy10by1kb2N1bWVudHMuY29tcG9uZW50LmludGVyZmFjZSc7XHJcblxyXG5jb25zdCBjb25maWc6IEJpbXBsdXNBdHRhY2htZW50c0NvbmZpZyA9IHtcclxuICBzaG93Tm9BdHRhY2htZW50c0ZvdW5kOiBmYWxzZSxcclxuICBoaWRlQXR0YWNobWVudFNpemU6IHRydWUsXHJcbn07XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWJpbXBsdXMtb2JqZWN0LWNvbW1lbnRzLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0LmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTmdGb3IsXHJcbiAgICBCaW1wbHVzVGV4dGFyZWFDb21wb25lbnQsXHJcbiAgICBCaW1wbHVzQ29tbWVudENvbXBvbmVudCxcclxuICAgIEJpbXBsdXNCdXR0b25zUm93Q29tcG9uZW50LFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgQmltcGx1c1Njcm9sbGFibGVDb250YWluZXJDb21wb25lbnQsXHJcbiAgICBCaW1wbHVzSW5wdXRUZXh0RmllbGRDb21wb25lbnQsXHJcbiAgICBCaW1wbHVzQXR0YWNobWVudHNDb21wb25lbnQsXHJcbiAgICBMaW5rc1RvRG9jdW1lbnRzQ29tcG9uZW50LFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQXN5bmNQaXBlLFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBEYXRlUGlwZSxcclxuICAgIEJpbXBsdXNPYmplY3RDb21tZW50c0xpc3RTZXJ2aWNlLFxyXG4gICAgQmltcGx1c0F0dGFjaG1lbnRzU2VydmljZSxcclxuICAgIHsgcHJvdmlkZTogQklNUExVU19BVFRBQ0hNRU5UU19DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmltcGx1c09iamVjdENvbW1lbnRzTGlzdENvbXBvbmVudFxyXG4gIGV4dGVuZHMgQmltcGx1c0xvY2FsaXplZFdpZGdldENvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0XHJcbntcclxuICBoeXBlcmxpbmtGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGFwaSE6IFdlYlNkay5BcGkgfCBudWxsO1xyXG4gIEBJbnB1dCgpIHByb2plY3Q6IFByb2plY3ROYXZpZ2F0b3JQcm9qZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgd29ybWhvbGVTZWxlY3Rvcjogc3RyaW5nID0gXCJsb2NhbEVtYmVkZGVkTW9kYWxJZFwiO1xyXG4gIEBJbnB1dCgpIGVudjogc3RyaW5nID0gXCJwcm9kXCI7XHJcbiAgQElucHV0KCkgYXR0YWNobWVudExpbmtJdGVtczogQXR0YWNobWVudExpbmtJdGVtW10gPSBbXVxyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb21tZW50c0xpc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXZWJTZGsuQ29tbWVudFJlc3BvbnNlW10+KFtdKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF0dGFjaG1lbnRzU3RhdGUgPSBzaWduYWw8QXR0YWNobWVudFtdPihbXSk7XHJcbiAgYnV0dG9uUm93SXRlbXM6IEJpbXBsdXNCdXR0b25Sb3dJdGVtW10gPSBbXTtcclxuICBoeXBlcmxpbmtCdXR0b25Sb3dJdGVtczogQmltcGx1c0J1dHRvblJvd0l0ZW1bXSA9IFtdO1xyXG4gIHRleHRBcmVhVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGxhc3RTaG93bkRhdGUgPSAnJztcclxuICBwbGFjZWhvbGRlciA9ICcnO1xyXG4gIG5hbWUgPSAnJztcclxuICByZWFkb25seSA9IGZhbHNlO1xyXG4gIGF1dG9SZXNpemVUZXh0YXJlYSA9IHRydWU7XHJcbiAgbWluUm93cyA9IDM7XHJcbiAgbWF4Um93cyA9IDEwO1xyXG4gIGNsZWFyVmFsdWUgPSBmYWxzZTtcclxuICAvLyBhdHRhY2htZW50IGlkcyByZWFkeSB0byBtYXAgdG8gY29uY3JldGUgY29tbWVudFxyXG4gIG5ld0F0dGFjaG1lbnRJRHM6IHN0cmluZ1tdID0gW11cclxuXHJcbiAgaXNBZGRpbmdIeXBlcmxpbms6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnRlcm1lZGlhdGVIeXBlcmxpbmtzOiBQYXJ0aWFsPFdlYlNkay5IeXBlcmxpbms+W10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfcm9vdE9iamVjdElkID0gJyc7XHJcbiAgcHJpdmF0ZSBfdXNlcklkID0gJyc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJvb3RPYmplY3RJZChpZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9yb290T2JqZWN0SWQgPSBpZDtcclxuICB9XHJcblxyXG4gIGdldCByb290T2JqZWN0SWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yb290T2JqZWN0SWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB1c2VySWQoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdXNlcklkID0gaWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlcklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlcklkO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBiaW1wbHVzQXR0YWNobWVudHNTZXJ2aWNlOiBCaW1wbHVzQXR0YWNobWVudHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBiaW1wbHVzT2JqZWN0Q29tbWVudHNMaXN0U2VydmljZTogQmltcGx1c09iamVjdENvbW1lbnRzTGlzdFNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuaHlwZXJsaW5rRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiBbJycsIFtdXSxcclxuICAgICAgdXJsOiBbXHJcbiAgICAgICAgJycsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXltePD5dKiQvKSwgLy8gRG8gbm90IGFsbG93IDwgb3IgPlxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKD8hXFxzKiQpLisvKSwgLy8gRG8gbm90IGFsbG93IGFsbCBlbXB0eSBzdHJpbmcsIGJ1dCBhbGxvdyB0ZXh0IGFmdGVyIHNwYWNlc1xyXG4gICAgICAgIF0sXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYmltcGx1c09iamVjdENvbW1lbnRzTGlzdFNlcnZpY2UuYXBpID0gdGhpcy5hcGkhO1xyXG4gICAgdGhpcy5sb2FkQ29tbWVudHMoKTtcclxuICAgIGNvbnN0IHN1Ym1pdDogQmltcGx1c0J1dHRvblJvd0l0ZW1bXSA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnc3VibWl0JyxcclxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ19BZGQgY29tbWVudCcpLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdfQWRkIGNvbW1lbnQnKSxcclxuICAgICAgICBkaXNhYmxlZDogIXRoaXMudGV4dEFyZWFWYWx1ZSxcclxuICAgICAgICBidXR0b25TdHlsZTogJ3ByaW1hcnknLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgJ19QbGFjZSBjb21tZW50IHRleHQgaGVyZSdcclxuICAgICk7XHJcbiAgICB0aGlzLm5hbWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY29tbWVudCcpO1xyXG4gICAgdGhpcy5idXR0b25Sb3dJdGVtcyA9IHN1Ym1pdDtcclxuXHJcbiAgICB0aGlzLmh5cGVybGlua0J1dHRvblJvd0l0ZW1zLnB1c2goXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2NhbmNlbC1oeXBlcmxpbmsnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnX0NhbmNlbCcpLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdfQ2FuY2VsJyksXHJcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIGJ1dHRvblN0eWxlOiAncHJpbWFyeScsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2FkZC1oeXBlcmxpbmsnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnX0FkZCBoeXBlcmxpbmsnKSxcclxuICAgICAgICB0b29sdGlwOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnX0FkZCBoeXBlcmxpbmsnKSxcclxuICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICBidXR0b25TdHlsZTogJ3ByaW1hcnknLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaHlwZXJsaW5rRm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgIHRoaXMuaHlwZXJsaW5rQnV0dG9uUm93SXRlbXNbMV0uZGlzYWJsZWQgPSBzdGF0dXMgIT09ICdWQUxJRCc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkF0dGFjaG1lbnRzQ2hhbmdlKG5ld0F0dGFjaG1lbnRJRHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ld0F0dGFjaG1lbnRJRHMgPSBbLi4udGhpcy5uZXdBdHRhY2htZW50SURzLCAuLi5uZXdBdHRhY2htZW50SURzXVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uQWRkQXR0YWNobWVudChmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5iaW1wbHVzQXR0YWNobWVudHNTZXJ2aWNlLmdldEF0dGFjaG1lbnQoZmlsZSk7XHJcbiAgICB0aGlzLmF0dGFjaG1lbnRzU3RhdGUudXBkYXRlKGF0dGFjaG1lbnRzID0+IChbLi4uYXR0YWNobWVudHMsIGF0dGFjaG1lbnRdKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25EZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0YWNobWVudHNTdGF0ZS51cGRhdGUoYXR0YWNobWVudHMgPT4gYXR0YWNobWVudHMuZmlsdGVyKGEgPT4gYSAhPT0gYXR0YWNobWVudCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEV2ZW50IG9uIGNsaWNrIGF0dGFjaG1lbnQuICovXHJcbiAgcHJvdGVjdGVkIG9uR2V0QXR0YWNobWVudChhdHRhY2htZW50OiBBdHRhY2htZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmJpbXBsdXNPYmplY3RDb21tZW50c0xpc3RTZXJ2aWNlLmRvd25sb2FkQXR0YWNobWVudChhdHRhY2htZW50KTtcclxuICB9XHJcblxyXG4gIG9uVGV4dGFyZWFWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRleHRBcmVhVmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuYnV0dG9uUm93SXRlbXNbMF0uZGlzYWJsZWQgPSAhdmFsdWU7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBY3Rpb25Db21tZW50RXZlbnQoZXZlbnQ6IENvbW1lbnRPdXRwdXREYXRhKSB7XHJcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnZGVsZXRlJykge1xyXG4gICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBDb21tZW50RGF0YTtcclxuICAgICAgdGhpcy5vcGVuRGlhbG9nRGVsZXRlQ29tbWVudChkYXRhLmNvbW1lbnRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhY3Rpb25EaWFsb2dDbG9zZShkYXRhOiBJRGlhbG9nQ29uZmlybUNsb3NlKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2UoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBvcGVuRGlhbG9nRGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQmltcGx1c092ZXJsYXlEaWFsb2dEZWxldGVDb21wb25lbnQsIHtcclxuICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgIHBvc2l0aW9uOiAnbWlkZGxlJyxcclxuICAgICAgICBwb3NpdGlvbk9wdGlvbnM6IHt9LFxyXG4gICAgICAgIG92ZXJsYXlDbGlja0VuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIG92ZXJsYXlWaXNpYmlsaXR5RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICAnX0NvbW1lbnQgZGVsZXRlIGNvbmZpcm1hdGlvbiB0aXRsZSdcclxuICAgICAgICApLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ19Db21tZW50IGRlbGV0ZSBjb25maXJtYXRpb24gbWVzc2FnZSdcclxuICAgICAgICApLFxyXG4gICAgICAgIGFjY2VwdENhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZUNvbW1lbnQoY29tbWVudElkKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc1NhbWVEYXRlKGRhdGU/OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aW1lID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ3Nob3J0RGF0ZScpO1xyXG4gICAgaWYgKHRoaXMubGFzdFNob3duRGF0ZSA9PT0gdGltZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RTaG93bkRhdGUgPSBkYXRlO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBidXR0b25Sb3dCdXR0b25DbGlja2VkKCRldmVudDogQmltcGx1c0J1dHRvbkNsaWNrRXZlbnQpIHtcclxuICAgIGlmICgkZXZlbnQuaWQgPT09ICdzdWJtaXQnKSB7XHJcbiAgICAgIGlmICghdGhpcy5hcGkgfHwgIXRoaXMucm9vdE9iamVjdElkKSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XHJcblxyXG4gICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgIHRleHQ6IHRoaXMudGV4dEFyZWFWYWx1ZSxcclxuICAgICAgICBvYmplY3RJZDogdGhpcy5yb290T2JqZWN0SWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGRhdGFUZXh0ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICAgIHRoaXMuYmltcGx1c09iamVjdENvbW1lbnRzTGlzdFNlcnZpY2UucG9zdENvbW1lbnRzKHRoaXMucm9vdE9iamVjdElkLCBkYXRhVGV4dCwgdGhpcy5nZXRIeXBlcmxpbmtzKHRoaXMucm9vdE9iamVjdElkKSwgdGhpcy5hdHRhY2htZW50c1N0YXRlKCksIHRoaXMubmV3QXR0YWNobWVudElEcylcclxuICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMuYmltcGx1c09iamVjdENvbW1lbnRzTGlzdFNlcnZpY2UubG9hZENvbW1lbnRzKHRoaXMucm9vdE9iamVjdElkKSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChjb21tZW50cykgPT4gdGhpcy5jb21tZW50c0xpc3QkLm5leHQoY29tbWVudHMpLFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzU3RhdGUuc2V0KFtdKTtcclxuICAgICAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSHlwZXJsaW5rcyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50ZXh0QXJlYVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvblJvd0l0ZW1zWzBdLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoeXBlcmxpbmtCdXR0b25Sb3dCdXR0b25DbGlja2VkKCRldmVudDogQmltcGx1c0J1dHRvbkNsaWNrRXZlbnQpIHtcclxuICAgIGlmICgkZXZlbnQuaWQgPT09ICdhZGQtaHlwZXJsaW5rJykge1xyXG4gICAgICB0aGlzLmFkZEludGVybWVkaWF0ZUh5cGVybGluaygpO1xyXG4gICAgfSBlbHNlIGlmICgkZXZlbnQuaWQgPT09ICdjYW5jZWwtaHlwZXJsaW5rJykge1xyXG4gICAgICB0aGlzLmh5cGVybGlua0Zvcm0ucmVzZXQoKTtcclxuICAgICAgdGhpcy5pc0FkZGluZ0h5cGVybGluayA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkSW50ZXJtZWRpYXRlSHlwZXJsaW5rKCkge1xyXG4gICAgaWYgKCF0aGlzLmh5cGVybGlua0Zvcm0udmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzYW5pdGl6ZWRVcmw6IHN0cmluZyA9IHRoaXMuaHlwZXJsaW5rRm9ybS52YWx1ZVsndXJsJ10udHJpbSgpO1xyXG4gICAgaWYgKCFSZWdFeHAoL15odHRwKHM/KTpcXC9cXC8vKS5leGVjKHNhbml0aXplZFVybCkpIHtcclxuICAgICAgc2FuaXRpemVkVXJsID0gJ2h0dHBzOi8vJyArIHNhbml0aXplZFVybDtcclxuICAgIH1cclxuICAgIGxldCBzYW5pdGl6ZWROYW1lID0gdGhpcy5oeXBlcmxpbmtGb3JtLnZhbHVlWyduYW1lJ10/LnRyaW0oKSA/PyAnJztcclxuICAgIGlmIChzYW5pdGl6ZWROYW1lID09PSAnJykge1xyXG4gICAgICBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVkVXJsO1xyXG4gICAgfVxyXG4gICAgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplZE5hbWU/LnJlcGxhY2UoL15odHRwKHM/KTpcXC9cXC8vLCAnJyk7XHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUh5cGVybGlua3MucHVzaCh7XHJcbiAgICAgIG5hbWU6IHNhbml0aXplZE5hbWUsXHJcbiAgICAgIHVybDogc2FuaXRpemVkVXJsLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmh5cGVybGlua0Zvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuaXNBZGRpbmdIeXBlcmxpbmsgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYmltcGx1c09iamVjdENvbW1lbnRzTGlzdFNlcnZpY2UuZGVsZXRlQ29tbWVudChjb21tZW50SWQpXHJcbiAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZENvbW1lbnRzKCkpXHJcbiAgfVxyXG5cclxuICBhZGRIeXBlcmxpbmtJY29uQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMuaXNBZGRpbmdIeXBlcmxpbmsgPSAhdGhpcy5pc0FkZGluZ0h5cGVybGluaztcclxuICB9XHJcblxyXG4gIGFkZEh5cGVybGlua0ljb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcgJykge1xyXG4gICAgICB0aGlzLmFkZEh5cGVybGlua0ljb25DbGlja2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVJbnRlcm1lZGlhdGVIeXBlcmxpbmsobGluazogUGFydGlhbDxXZWJTZGsuSHlwZXJsaW5rPikge1xyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIeXBlcmxpbmtzID0gdGhpcy5pbnRlcm1lZGlhdGVIeXBlcmxpbmtzLmZpbHRlcihcclxuICAgICAgKGh5cGVybGluaykgPT4gaHlwZXJsaW5rICE9PSBsaW5rXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSW50ZXJtZWRpYXRlSHlwZXJsaW5rS2V5cHJlc3MoXHJcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcclxuICAgIGxpbms6IFBhcnRpYWw8V2ViU2RrLkh5cGVybGluaz5cclxuICApIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcclxuICAgICAgdGhpcy5yZW1vdmVJbnRlcm1lZGlhdGVIeXBlcmxpbmsobGluayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0FjdFVzZXJBdXRob3IoaXRlbTogV2ViU2RrLkNvbW1lbnRSZXNwb25zZSkge1xyXG4gICAgcmV0dXJuIGl0ZW0uYXV0aG9yPy5pZCA9PT0gdGhpcy51c2VySWQ7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5TmFtZShpdGVtOiBXZWJTZGsuQ29tbWVudFJlc3BvbnNlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBpdGVtLmF1dGhvcj8uZGlzcGxheW5hbWUgPyBpdGVtLmF1dGhvcj8uZGlzcGxheW5hbWUgOiAnJztcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUoZGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxvY2FsZSA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2U7XHJcbiAgICBpZiAobG9jYWxlLmluY2x1ZGVzKCdlbicpKSB7XHJcbiAgICAgIGNvbnN0IHVuZm9ybWF0dGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICByZXR1cm4gdW5mb3JtYXR0ZWREYXRlLmdldE1vbnRoKCkgKyAnLycgKyB1bmZvcm1hdHRlZERhdGUuZ2V0RGF0ZSgpICsgJy8nICsgdW5mb3JtYXR0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodW5kZWZpbmVkLCB7IGRhdGVTdHlsZTogXCJzaG9ydFwiIH0pLmZvcm1hdChuZXcgRGF0ZShkYXRlKSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclRleHRhcmVhVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbGVhclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQ29tbWVudHMoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5iaW1wbHVzT2JqZWN0Q29tbWVudHNMaXN0U2VydmljZVxyXG4gICAgLmxvYWRDb21tZW50cyh0aGlzLnJvb3RPYmplY3RJZClcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiBjb21tZW50cyA9PiB0aGlzLmNvbW1lbnRzTGlzdCQubmV4dChjb21tZW50cyksXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHlwZXJsaW5rcyhvYmplY3RJZDogc3RyaW5nKTogUGFydGlhbDxXZWJTZGsuSHlwZXJsaW5rPltdIHtcclxuICAgIHJldHVybiB0aGlzLmludGVybWVkaWF0ZUh5cGVybGlua3MubWFwKChoKSA9PiAoe1xyXG4gICAgICAuLi5oLFxyXG4gICAgICBvYmplY3RJZCxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG9uRW50ZXJLZXlQcmVzc2VkSW5IeXBlcmxpbmtGb3JtKCkge1xyXG4gICAgdGhpcy5hZGRJbnRlcm1lZGlhdGVIeXBlcmxpbmsoKTtcclxuICB9XHJcbn1cclxuIiwiQGlmICghbG9hZGluZygpKSB7XHJcbjxkaXYgY2xhc3M9XCJjb21tZW50LXRhYi1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwidGV4dGFyZWEtY29udGFpbmVyXCI+XHJcbiAgICA8bGliLWJpbXBsdXMtdGV4dGFyZWFcclxuICAgICAgKHRleHRBcmVhVmFsdWVDaGFuZ2UpPVwib25UZXh0YXJlYVZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICBbbmFtZV09XCJuYW1lXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgW2FjdGl2ZUF1dG9SZXNpemVUZXh0YXJlYV09XCJ0cnVlXCJcclxuICAgICAgW21pblJvd3NdPVwibWluUm93c1wiXHJcbiAgICAgIFttYXhSb3dzXT1cIm1heFJvd3NcIlxyXG4gICAgICBbY2xlYXJWYWx1ZV09XCJjbGVhclRleHRhcmVhVmFsdWUoKVwiXHJcbiAgICA+PC9saWItYmltcGx1cy10ZXh0YXJlYT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGxpYi1iaW1wbHVzLWF0dGFjaG1lbnRzXHJcbiAgICAjYXR0YWNobWVudHNcclxuICAgIGxpc3RPbmx5XHJcbiAgICBbYXR0YWNobWVudHNdPVwiYXR0YWNobWVudHNTdGF0ZSgpXCJcclxuICAgIChhZGRBdHRhY2htZW50KT1cIm9uQWRkQXR0YWNobWVudCgkZXZlbnQpXCJcclxuICAgIChkZWxldGVBdHRhY2htZW50KT1cIm9uRGVsZXRlQXR0YWNobWVudCgkZXZlbnQpXCJcclxuICAvPlxyXG5cclxuICA8bGliLWxpbmtzLXRvLWRvY3VtZW50cyBcclxuICAgICNsaW5rc1RvRG9jdW1lbnRzXHJcbiAgICBsaXN0T25seVxyXG4gICAgaGlkZUF0dGFjaG1lbnRTaXplXHJcbiAgICBzaG93RW1wdHlNZXNzYWdlPVwiZmFsc2VcIiBcclxuICAgIFthdHRhY2htZW50c109XCJhdHRhY2htZW50TGlua0l0ZW1zXCJcclxuICAgIChhdHRhY2htZW50c0NoYW5nZSk9XCJvbkF0dGFjaG1lbnRzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW2FwaV09XCJhcGlcIiAgICAgICAgXHJcbiAgICBbcHJvamVjdF09XCJwcm9qZWN0XCJcclxuICAgIFtyb290T2JqZWN0SWRdPVwicm9vdE9iamVjdElkXCJcclxuICAgIFtjYW5DcmVhdGVBdHRhY2htZW50TGlua109XCJ0cnVlXCJcclxuICAgIFtjYW5EZWxldGVBdHRhY2htZW50TGlua109XCJ0cnVlXCJcclxuICAgIFt3b3JtaG9sZVNlbGVjdG9yXT1cIndvcm1ob2xlU2VsZWN0b3JcIlxyXG4gICAgW2Vudl09XCJlbnZcIlxyXG4gIC8+XHJcblxyXG4gIEBpZiAoaW50ZXJtZWRpYXRlSHlwZXJsaW5rcy5sZW5ndGgpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJpbnRlcm1lZGlhdGUtaHlwZXJsaW5rcy1saXN0XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgaW50ZXJtZWRpYXRlSHlwZXJsaW5rc1wiIGNsYXNzPVwiaW50ZXJtZWRpYXRlLWh5cGVybGlua1wiIHRpdGxlPVwie3sgbGluay51cmwgfX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGluay1pY29uIGljb24tc21hbGxcIiB0aXRsZT1cInt7IGxpbmsudXJsIH19XCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHRcIj57eyBsaW5rLm5hbWUgfX08L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImNhbmNlbC1pY29uXCIgdGl0bGU9XCJ7eyAnX0h5cGVybGluayBkZWxldGUgY29uZmlybWF0aW9uIHRpdGxlJyB8IHRyYW5zbGF0ZSB9fVwiIChjbGljayk9XCJyZW1vdmVJbnRlcm1lZGlhdGVIeXBlcmxpbmsobGluaylcIiAoa2V5ZG93bik9XCJyZW1vdmVJbnRlcm1lZGlhdGVIeXBlcmxpbmtLZXlwcmVzcygkZXZlbnQsIGxpbmspXCI+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxuXHJcbiAgQGlmIChpc0FkZGluZ0h5cGVybGluaykge1xyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImh5cGVybGlua0Zvcm1cIiBjbGFzcz1cImh5cGVybGluay1pbnB1dC1mb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImh5cGVybGluay1pbnB1dC1yb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWljb24gaWNvbi1uZXh0LXRvLXRleHQtaW5wdXRcIj48L2Rpdj5cclxuICAgICAgICAgIDxsaWItYmltcGx1cy1pbnB1dC10ZXh0LWZpZWxkIGNsYXNzPVwiZmxleC1ncm93XCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwie3sgJ19OYW1lJyB8IHRyYW5zbGF0ZSB9fVwiIChlbnRlcktleVByZXNzZWQpPVwib25FbnRlcktleVByZXNzZWRJbkh5cGVybGlua0Zvcm0oKVwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaHlwZXJsaW5rLWlucHV0LXJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tbmV4dC10by10ZXh0LWlucHV0XCI+PC9kaXY+XHJcbiAgICAgICAgICA8bGliLWJpbXBsdXMtaW5wdXQtdGV4dC1maWVsZCBjbGFzcz1cImZsZXgtZ3Jvd1wiIGZvcm1Db250cm9sTmFtZT1cInVybFwiIHBsYWNlaG9sZGVyPVwie3sgJ19VUkwnIHwgdHJhbnNsYXRlIH19XCIgKGVudGVyS2V5UHJlc3NlZCk9XCJvbkVudGVyS2V5UHJlc3NlZEluSHlwZXJsaW5rRm9ybSgpXCIvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bGliLWJpbXBsdXMtYnV0dG9ucy1yb3cgW2l0ZW1zXT1cImh5cGVybGlua0J1dHRvblJvd0l0ZW1zXCIgKGJ1dHRvbkNsaWNrZWQpPVwiaHlwZXJsaW5rQnV0dG9uUm93QnV0dG9uQ2xpY2tlZCgkZXZlbnQpXCIvPlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgfVxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtdGFiLWF0dGFjaG1lbnRzLXNlY3Rpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb21tZW50cy1hdHRhY2htZW50cy1saXN0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYXR0YWNobWVudHMgaWNvbiBhdHRhY2htZW50cy1pY29uIGhpZGRlblwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudC1pY29uIGljb24tc21hbGwgaW50ZXJhY3RpdmVcIiBbdGl0bGVdPVwiJ19BZGQgYXR0YWNobWVudCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiYXR0YWNobWVudHMub3BlbigpXCIgKGtleWRvd24pPVwiYXR0YWNobWVudHMub3BlbigpXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWljb24gaWNvbi1zbWFsbCBpbnRlcmFjdGl2ZVwiIFt0aXRsZV09XCInX0FkZCBoeXBlcmxpbmsnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImFkZEh5cGVybGlua0ljb25DbGlja2VkKClcIiAoa2V5ZG93bik9XCJhZGRIeXBlcmxpbmtJY29uS2V5cHJlc3MoJGV2ZW50KVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGluay1kb2N1bWVudC1pY29uIGljb24tc21hbGwgaW50ZXJhY3RpdmVcIiBbdGl0bGVdPVwiJ19BZGRfYXR0YWNobWVudF9saW5rJyB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJsaW5rc1RvRG9jdW1lbnRzLmNyZWF0ZUF0dGFjaG1lbnRMaW5rKGFwaSEpXCIgKGtleWRvd24pPVwibGlua3NUb0RvY3VtZW50cy5jcmVhdGVBdHRhY2htZW50TGluayhhcGkhKVwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFiLWF0dGFjaG1lbnRsaW5rcyBpY29uIGF0dGFjaG1lbnRzLWljb24gaGlkZGVuXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtY29tbWVudFwiPlxyXG4gICAgICA8bGliLWJpbXBsdXMtYnV0dG9ucy1yb3dcclxuICAgICAgICBbaXRlbXNdPVwiYnV0dG9uUm93SXRlbXNcIlxyXG4gICAgICAgIChidXR0b25DbGlja2VkKT1cImJ1dHRvblJvd0J1dHRvbkNsaWNrZWQoJGV2ZW50KVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbW1lbnRzLXNlcGFyYXRvclwiPjwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsYWJsZS1jb250ZW50LWNvbnRhaW5lclwiPlxyXG4gICAgPGxpYi1iaW1wbHVzLXNjcm9sbGFibGUtY29udGFpbmVyPlxyXG4gICAgICBAZm9yIChpdGVtIG9mIGNvbW1lbnRzTGlzdCQgfCBhc3luYzsgdHJhY2sgaXRlbSkge1xyXG4gICAgICAgIEBpZihpdGVtLmNyZWF0ZWRBdCAmJiBpc1NhbWVEYXRlKGl0ZW0uY3JlYXRlZEF0KSlcclxuICAgICAgICB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtbGlzdC1kYXRlXCI+XHJcbiAgICAgICAgICB7e2Zvcm1hdERhdGUoaXRlbS5jcmVhdGVkQXQpfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGxpYi1iaW1wbHVzLWNvbW1lbnRcclxuICAgICAgICAgIChvdXRwdXRBY3Rpb25Db21tZW50RXZlbnQpPVwiaGFuZGxlQWN0aW9uQ29tbWVudEV2ZW50KCRldmVudClcIlxyXG4gICAgICAgICAgKGdldEF0dGFjaG1lbnQpPVwib25HZXRBdHRhY2htZW50KCRldmVudClcIlxyXG4gICAgICAgICAgW21lc3NhZ2VdPVwiaXRlbS50ZXh0XCJcclxuICAgICAgICAgIFtkYXRlXT1cIml0ZW0uY3JlYXRlZEF0ID8gaXRlbS5jcmVhdGVkQXQgOiAnJ1wiXHJcbiAgICAgICAgICBhY3Rpb249XCJkZWxldGVcIlxyXG4gICAgICAgICAgW2NvbW1lbnRJZF09XCJpdGVtLmlkXCJcclxuICAgICAgICAgIFthdHRhY2htZW50c109XCJpdGVtLmF0dGFjaG1lbnRzID8/IFtdXCJcclxuICAgICAgICAgIFthdHRhY2htZW50TGlua0l0ZW1zXT1cIml0ZW0uYXR0YWNobWVudExpbmtzID8/IFtdXCJcclxuICAgICAgICAgIFtoeXBlcmxpbmtzXT1cIml0ZW0uaHlwZXJsaW5rc1wiXHJcbiAgICAgICAgICBbaXNBY3RVc2VyQXV0aG9yXT1cImlzQWN0VXNlckF1dGhvcihpdGVtKVwiXHJcbiAgICAgICAgICBbZGlzcGxheW5hbWVdPVwiZGlzcGxheU5hbWUoaXRlbSlcIj5cclxuICAgICAgICA8L2xpYi1iaW1wbHVzLWNvbW1lbnQ+XHJcbiAgICAgIH1cclxuICAgIDwvbGliLWJpbXBsdXMtc2Nyb2xsYWJsZS1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbn0gQGVsc2V7XHJcbjxkaXYgZGF0YS10ZXN0PVwibG9hZGluZ1wiPnt7J19Mb2FkaW5nJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbn1cclxuIl19
@@ -0,0 +1,69 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { defaultIfEmpty, first, forkJoin, from, map, of, switchMap } from 'rxjs';
3
+ import { BimplusAttachmentsService } from '../bimplus-attachments/services/bimplus-attachments.service';
4
+ import { postAttachmentLinks } from '../links-to-documents/links-to-documents.component';
5
+ import * as i0 from "@angular/core";
6
+ export class BimplusObjectCommentsListService {
7
+ constructor() {
8
+ this.bimplusAttachmentsService = inject(BimplusAttachmentsService);
9
+ }
10
+ deleteComment(commentId) {
11
+ return from(this.api.comments.delete(commentId));
12
+ }
13
+ downloadAttachment(attachment) {
14
+ const { id, fileName } = attachment;
15
+ if (!this.api) {
16
+ return;
17
+ }
18
+ const api = this.api;
19
+ const path = `${api.getApiTeamUrl()}attachments/${id}/download?api-token=${api.getAccessToken()}&openInBrowser=true`;
20
+ this.bimplusAttachmentsService.download(path, fileName);
21
+ }
22
+ postComments(rootObjectId, dataText, hyperlinks, attachments, newAttachmentIDs) {
23
+ return from(this.api.objects.postComment(rootObjectId, dataText))
24
+ .pipe(switchMap(createdComment => {
25
+ const { id } = createdComment;
26
+ const formData$ = attachments
27
+ .map(attachment => {
28
+ const attachmentsPayload = new FormData();
29
+ attachmentsPayload.append('file', attachment.file);
30
+ attachmentsPayload.append('name', attachment.fileName);
31
+ attachmentsPayload.append('size', attachment.file.size.toString());
32
+ attachmentsPayload.append('type', attachment.file.type);
33
+ attachmentsPayload.append('objectId', rootObjectId);
34
+ return attachmentsPayload;
35
+ });
36
+ return of(formData$).pipe(map(formData => ({ formData, id })));
37
+ }), switchMap(({ id: createdCommentId, formData }) => {
38
+ const callback = function () { console.info(''); };
39
+ const calls = formData?.map(data => from(this.api.objects.postAttachment(createdCommentId, data, callback, '')));
40
+ return calls?.length ? forkJoin(calls).pipe(map(() => createdCommentId)) : of(createdCommentId);
41
+ }), switchMap(createdCommentId => {
42
+ return postAttachmentLinks(newAttachmentIDs, createdCommentId, this.api).pipe(map(() => createdCommentId));
43
+ }), switchMap(createdCommentId => {
44
+ return this.manageHyperLinks(createdCommentId, hyperlinks);
45
+ }), defaultIfEmpty(null), first());
46
+ }
47
+ loadComments(objectId) {
48
+ return from(this.api.objects.getComments(objectId));
49
+ }
50
+ manageHyperLinks(createdCommentId, hyperlinks) {
51
+ const hyperlinkPromises = [];
52
+ hyperlinks.forEach((h) => {
53
+ const hyperlinkData = JSON.stringify(h);
54
+ const promise = this.api?.objects
55
+ .postHyperlink(createdCommentId, hyperlinkData)
56
+ .catch((err) => {
57
+ console.log(err);
58
+ });
59
+ hyperlinkPromises.push(promise);
60
+ });
61
+ return from(Promise.all(hyperlinkPromises));
62
+ }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BimplusObjectCommentsListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
64
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BimplusObjectCommentsListService }); }
65
+ }
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BimplusObjectCommentsListService, decorators: [{
67
+ type: Injectable
68
+ }] });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmltcGx1cy1vYmplY3QtY29tbWVudHMtbGlzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWJpbXBsdXMtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYmltcGx1cy1vYmplY3QtY29tbWVudHMtbGlzdC9iaW1wbHVzLW9iamVjdC1jb21tZW50cy1saXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUV4RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7QUFHekYsTUFBTSxPQUFPLGdDQUFnQztJQUQ3QztRQUltQiw4QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQTRFaEY7SUExRVEsYUFBYSxDQUFDLFNBQWlCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxVQUFzQjtRQUM5QyxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFD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Q3BCLEtBQUssRUFBRSxDQUNSLENBQUE7SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxnQkFBZ0IsQ0FDckIsZ0JBQXdCLEVBQ3hCLFVBQXVDO1FBRXZDLE1BQU0saUJBQWlCLEdBQ3JCLEVBQUUsQ0FBQztRQUVMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTztpQkFDOUIsYUFBYSxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztpQkFDOUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNMLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7K0dBOUVVLGdDQUFnQzttSEFBaEMsZ0NBQWdDOzs0RkFBaEMsZ0NBQWdDO2tCQUQ1QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBXZWJTZGsgZnJvbSAnYmltcGx1cy13ZWJzZGsnO1xyXG5pbXBvcnQge2RlZmF1bHRJZkVtcHR5LCBmaXJzdCwgZm9ya0pvaW4sIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbXBsdXNBdHRhY2htZW50c1NlcnZpY2UgfSBmcm9tICcuLi9iaW1wbHVzLWF0dGFjaG1lbnRzL3NlcnZpY2VzL2JpbXBsdXMtYXR0YWNobWVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnQgfSBmcm9tICcuLi9iaW1wbHVzLWF0dGFjaG1lbnRzL2JpbXBsdXMtYXR0YWNobWVudHMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgcG9zdEF0dGFjaG1lbnRMaW5rcyB9IGZyb20gJy4uL2xpbmtzLXRvLWRvY3VtZW50cy9saW5rcy10by1kb2N1bWVudHMuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEJpbXBsdXNPYmplY3RDb21tZW50c0xpc3RTZXJ2aWNlIHtcclxuICBwdWJsaWMgYXBpITogV2ViU2RrLkFwaTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBiaW1wbHVzQXR0YWNobWVudHNTZXJ2aWNlID0gaW5qZWN0KEJpbXBsdXNBdHRhY2htZW50c1NlcnZpY2UpO1xyXG5cclxuICBwdWJsaWMgZGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGZyb20odGhpcy5hcGkuY29tbWVudHMuZGVsZXRlKGNvbW1lbnRJZCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkQXR0YWNobWVudChhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XHJcbiAgICBjb25zdCB7IGlkLCBmaWxlTmFtZSB9ID0gYXR0YWNobWVudDtcclxuICAgIGlmICghdGhpcy5hcGkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXBpID0gdGhpcy5hcGk7XHJcbiAgICBjb25zdCBwYXRoID0gYCR7YXBpLmdldEFwaVRlYW1VcmwoKX1hdHRhY2htZW50cy8ke2lkfS9kb3dubG9hZD9hcGktdG9rZW49JHthcGkuZ2V0QWNjZXNzVG9rZW4oKX0mb3BlbkluQnJvd3Nlcj10cnVlYDtcclxuICAgIHRoaXMuYmltcGx1c0F0dGFjaG1lbnRzU2VydmljZS5kb3dubG9hZChwYXRoLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcG9zdENvbW1lbnRzKHJvb3RPYmplY3RJZDogc3RyaW5nLCBkYXRhVGV4dDogc3RyaW5nLCBoeXBlcmxpbmtzOiBQYXJ0aWFsPFdlYlNkay5IeXBlcmxpbms+W10sIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50W10sIG5ld0F0dGFjaG1lbnRJRHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFwaS5vYmplY3RzLnBvc3RDb21tZW50KHJvb3RPYmplY3RJZCwgZGF0YVRleHQpKVxyXG4gICAgLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChjcmVhdGVkQ29tbWVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY3JlYXRlZENvbW1lbnQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhJCA9IGF0dGFjaG1lbnRzXHJcbiAgICAgICAgICAubWFwKGF0dGFjaG1lbnQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50c1BheWxvYWQgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgICAgYXR0YWNobWVudHNQYXlsb2FkLmFwcGVuZCgnZmlsZScsIGF0dGFjaG1lbnQuZmlsZSEpO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50c1BheWxvYWQuYXBwZW5kKCduYW1lJywgYXR0YWNobWVudC5maWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzUGF5bG9hZC5hcHBlbmQoJ3NpemUnLCBhdHRhY2htZW50LmZpbGUhLnNpemUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzUGF5bG9hZC5hcHBlbmQoJ3R5cGUnLCBhdHRhY2htZW50LmZpbGUhLnR5cGUpO1xyXG4gICAgICAgICAgICBhdHRhY2htZW50c1BheWxvYWQuYXBwZW5kKCdvYmplY3RJZCcsIHJvb3RPYmplY3RJZCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudHNQYXlsb2FkO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBvZihmb3JtRGF0YSQpLnBpcGUobWFwKGZvcm1EYXRhID0+ICh7IGZvcm1EYXRhLCBpZCB9KSkpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCh7IGlkOiBjcmVhdGVkQ29tbWVudElkLCBmb3JtRGF0YSB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsgY29uc29sZS5pbmZvKCcnKSB9O1xyXG4gICAgICAgIGNvbnN0IGNhbGxzID0gZm9ybURhdGE/Lm1hcChkYXRhID0+IGZyb20odGhpcy5hcGkub2JqZWN0cy5wb3N0QXR0YWNobWVudChjcmVhdGVkQ29tbWVudElkLCBkYXRhLCBjYWxsYmFjaywgJycpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjYWxscz8ubGVuZ3RoID8gZm9ya0pvaW4oY2FsbHMpLnBpcGUobWFwKCgpID0+IGNyZWF0ZWRDb21tZW50SWQpKSA6IG9mKGNyZWF0ZWRDb21tZW50SWQpO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKGNyZWF0ZWRDb21tZW50SWQgPT4ge1xyXG4gICAgICAgIHJldHVybiBwb3N0QXR0YWNobWVudExpbmtzKG5ld0F0dGFjaG1lbnRJRHMsIGNyZWF0ZWRDb21tZW50SWQsIHRoaXMuYXBpKS5waXBlKG1hcCgoKSA9PiBjcmVhdGVkQ29tbWVudElkKSlcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChjcmVhdGVkQ29tbWVudElkID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYW5hZ2VIeXBlckxpbmtzKGNyZWF0ZWRDb21tZW50SWQsIGh5cGVybGlua3MpO1xyXG4gICAgICB9KSxcclxuICAgICAgZGVmYXVsdElmRW1wdHkobnVsbCksXHJcbiAgICAgIGZpcnN0KClcclxuICAgIClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkQ29tbWVudHMob2JqZWN0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8V2ViU2RrLkNvbW1lbnRzUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuYXBpLm9iamVjdHMuZ2V0Q29tbWVudHMob2JqZWN0SWQpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtYW5hZ2VIeXBlckxpbmtzKFxyXG4gICAgY3JlYXRlZENvbW1lbnRJZDogc3RyaW5nLFxyXG4gICAgaHlwZXJsaW5rczogUGFydGlhbDxXZWJTZGsuSHlwZXJsaW5rPltdXHJcbiAgKSB7XHJcbiAgICBjb25zdCBoeXBlcmxpbmtQcm9taXNlczogKFByb21pc2U8dm9pZCB8IFdlYlNkay5IeXBlcmxpbms+IHwgdW5kZWZpbmVkKVtdID1cclxuICAgICAgW107XHJcblxyXG4gICAgaHlwZXJsaW5rcy5mb3JFYWNoKChoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGh5cGVybGlua0RhdGEgPSBKU09OLnN0cmluZ2lmeShoKTtcclxuICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpPy5vYmplY3RzXHJcbiAgICAgICAgLnBvc3RIeXBlcmxpbmsoY3JlYXRlZENvbW1lbnRJZCwgaHlwZXJsaW5rRGF0YSlcclxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgaHlwZXJsaW5rUHJvbWlzZXMucHVzaChwcm9taXNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmcm9tKFByb21pc2UuYWxsKGh5cGVybGlua1Byb21pc2VzKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmltcGx1c09iamVjdENvbW1lbnRzSS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1iaW1wbHVzLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2JpbXBsdXMtb2JqZWN0LWNvbW1lbnRzLWxpc3QvYmltcGx1c09iamVjdENvbW1lbnRzSS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRGlhbG9nQ29uZmlybUNsb3NlIHtcclxuICAgIGNvbXBvbmVudERpYWxvZ05hbWU6IHN0cmluZztcclxuICAgIGFjdGlvbkJ1dHRvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbW1lbnRPdXRwdXREYXRhIHtcclxuICAgIGFjdGlvbjogc3RyaW5nO1xyXG4gICAgZGF0YTogdW5rbm93bjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21tZW50RGF0YSB7XHJcbiAgICBjb21tZW50SWQ6IHN0cmluZztcclxufSJdfQ==