@sinequa/assistant 3.9.4 → 3.9.6-rc1
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/chat/chat-message/chat-message.component.d.ts +17 -25
- package/chat/chat-message/i18n/de.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +18 -8
- package/chat/chat-reference/i18n/de.json +4 -0
- package/chat/chat-settings-v3/i18n/de.json +14 -0
- package/chat/chat.component.d.ts +2 -1
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +2 -3
- package/chat/debug-message/i18n/de.json +3 -0
- package/chat/dialogs/i18n/de.json +19 -0
- package/chat/directives/copy-to-clipboard.directive.d.ts +8 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +4 -9
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +3 -17
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +3 -8
- package/chat/documents-upload/documents-upload.service.d.ts +7 -16
- package/chat/documents-upload/i18n/de.json +24 -0
- package/chat/i18n/de.json +42 -0
- package/chat/markdown-it-plugins/code-block.plugin.d.ts +2 -0
- package/chat/markdown-it-plugins/image-reference.plugin.d.ts +3 -0
- package/chat/markdown-it-plugins/link.plugin.d.ts +5 -0
- package/chat/markdown-it-plugins/page-reference.plugin.d.ts +3 -0
- package/chat/markdown-it-plugins/reference.plugin.d.ts +7 -0
- package/chat/public-api.d.ts +2 -1
- package/chat/references/i18n/de.json +6 -0
- package/chat/references/references.component.d.ts +43 -0
- package/chat/saved-chats/i18n/de.json +5 -0
- package/chat/services/app.service.d.ts +2 -1
- package/chat/services/custom-elements.service.d.ts +13 -0
- package/chat/smart-renderer/smart-renderer.d.ts +23 -0
- package/chat/token-progress-bar/i18n/de.json +4 -0
- package/chat/tooltip/tooltip.directive.d.ts +2 -2
- package/chat/types.d.ts +8 -42
- package/esm2022/chat/chat-message/chat-message.component.mjs +33 -135
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +60 -26
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +1 -1
- package/esm2022/chat/chat.component.mjs +50 -13
- package/esm2022/chat/chat.service.mjs +3 -2
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +2 -2
- package/esm2022/chat/debug-message/debug-message.service.mjs +4 -7
- package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +68 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +21 -22
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +8 -31
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +12 -14
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +25 -44
- package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +14 -0
- package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +58 -0
- package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +15 -0
- package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +60 -0
- package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +68 -0
- package/esm2022/chat/public-api.mjs +3 -2
- package/esm2022/chat/references/references.component.mjs +293 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +4 -3
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +9 -12
- package/esm2022/chat/services/app.service.mjs +8 -2
- package/esm2022/chat/services/assistant-configuration.service.mjs +9 -18
- package/esm2022/chat/services/assistant-metadata.service.mjs +3 -3
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +3 -6
- package/esm2022/chat/services/custom-elements.service.mjs +43 -0
- package/esm2022/chat/smart-renderer/smart-renderer.mjs +103 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +9 -9
- package/esm2022/chat/types.mjs +2 -5
- package/fesm2022/sinequa-assistant-chat.mjs +913 -498
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +4 -6
- package/chat/prompt.component.d.ts +0 -25
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +0 -3
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +0 -3
- package/esm2022/chat/prompt.component.mjs +0 -88
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +0 -56
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +0 -57
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, inject
|
|
3
|
-
import { BehaviorSubject, catchError, combineLatest, EMPTY,
|
|
2
|
+
import { Component, inject } from "@angular/core";
|
|
3
|
+
import { BehaviorSubject, catchError, combineLatest, EMPTY, of, Subscription, switchMap, take, tap } from "rxjs";
|
|
4
4
|
import { parseISO, toDate } from "date-fns";
|
|
5
5
|
import { provideTranslocoScope, TranslocoPipe, TranslocoService } from '@jsverse/transloco';
|
|
6
6
|
import { isAuthenticated } from "@sinequa/atomic";
|
|
7
|
-
import { InstanceManagerService } from "../../instance-manager.service";
|
|
8
7
|
import { AssistantUtils } from "../../utils/utils.service";
|
|
9
8
|
import { DocumentsUploadService } from "../documents-upload.service";
|
|
10
9
|
import { FormatIconComponent } from '../../format-icon/format-icon.component';
|
|
11
10
|
import { NotificationsService } from "../../services/notification.service";
|
|
11
|
+
import { AppService } from "../../services/app.service";
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@angular/common";
|
|
14
14
|
export class DocumentListComponent {
|
|
@@ -16,14 +16,17 @@ export class DocumentListComponent {
|
|
|
16
16
|
this.groupedUploadedDocuments$ = new BehaviorSubject([]);
|
|
17
17
|
this.deletingAll = false;
|
|
18
18
|
this._subscription = new Subscription();
|
|
19
|
-
this.instanceManagerService = inject(InstanceManagerService);
|
|
20
19
|
this.documentsUploadService = inject(DocumentsUploadService);
|
|
21
20
|
this.notificationsService = inject(NotificationsService);
|
|
21
|
+
this.appService = inject(AppService);
|
|
22
22
|
this.transloco = inject(TranslocoService);
|
|
23
23
|
this.assistantUtils = inject(AssistantUtils);
|
|
24
24
|
}
|
|
25
25
|
ngOnInit() {
|
|
26
|
-
this._subscription.add(of(isAuthenticated()).pipe(
|
|
26
|
+
this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => {
|
|
27
|
+
this.onUpdateUploadedDocumentsList();
|
|
28
|
+
this.documentsUploadService.getDocumentsList();
|
|
29
|
+
}), catchError((error) => {
|
|
27
30
|
console.error(error);
|
|
28
31
|
this.notificationsService.error(error);
|
|
29
32
|
return EMPTY;
|
|
@@ -33,26 +36,23 @@ export class DocumentListComponent {
|
|
|
33
36
|
ngOnDestroy() {
|
|
34
37
|
this._subscription.unsubscribe();
|
|
35
38
|
}
|
|
36
|
-
instantiateChatService() {
|
|
37
|
-
this.chatService = this.instanceManagerService.getInstance(this.instanceId);
|
|
38
|
-
}
|
|
39
39
|
/**
|
|
40
40
|
* Updates the list of uploaded documents by fetching the latest data from the service.
|
|
41
41
|
* The fetched documents are grouped by date.
|
|
42
42
|
*
|
|
43
43
|
* @returns {void}
|
|
44
44
|
*/
|
|
45
|
-
|
|
45
|
+
onUpdateUploadedDocumentsList() {
|
|
46
46
|
this._subscription.add(combineLatest([
|
|
47
|
-
this.documentsUploadService.
|
|
47
|
+
this.documentsUploadService.uploadedDocuments$,
|
|
48
48
|
this.transloco.langChanges$
|
|
49
49
|
]).pipe(tap(([uploadedDocuments]) => {
|
|
50
|
-
this.groupedUploadedDocuments$.next(this._groupUploadedDocumentsByDate(uploadedDocuments
|
|
50
|
+
this.groupedUploadedDocuments$.next(this._groupUploadedDocumentsByDate(uploadedDocuments));
|
|
51
51
|
}), catchError((error) => {
|
|
52
52
|
console.error(error);
|
|
53
53
|
this.notificationsService.error(error);
|
|
54
54
|
return EMPTY;
|
|
55
|
-
})
|
|
55
|
+
}))
|
|
56
56
|
.subscribe());
|
|
57
57
|
}
|
|
58
58
|
deleteDocument(event, doc) {
|
|
@@ -78,8 +78,7 @@ export class DocumentListComponent {
|
|
|
78
78
|
.pipe(tap(() => {
|
|
79
79
|
this.notificationsService.success(this.transloco.translate('chatDocumentsUpload.deleteDocumentSuccess', { title: this.documentToDelete.fileName }));
|
|
80
80
|
this.documentToDelete = undefined;
|
|
81
|
-
|
|
82
|
-
}), catchError((error) => {
|
|
81
|
+
}), switchMap(() => this.documentsUploadService.getDocumentsList()), catchError((error) => {
|
|
83
82
|
console.error(error);
|
|
84
83
|
this.notificationsService.error(this.transloco.translate('chatDocumentsUpload.deleteDocumentError', { title: this.documentToDelete.fileName }));
|
|
85
84
|
return EMPTY;
|
|
@@ -108,8 +107,7 @@ export class DocumentListComponent {
|
|
|
108
107
|
.pipe(tap(() => {
|
|
109
108
|
this.deletingAll = false;
|
|
110
109
|
this.notificationsService.success(this.transloco.translate('chatDocumentsUpload.deleteAllDocumentsSuccess'));
|
|
111
|
-
|
|
112
|
-
}), catchError((error) => {
|
|
110
|
+
}), switchMap(() => this.documentsUploadService.getDocumentsList()), catchError((error) => {
|
|
113
111
|
console.error(error);
|
|
114
112
|
this.notificationsService.error(this.transloco.translate('chatDocumentsUpload.deleteAllDocumentsError'));
|
|
115
113
|
return EMPTY;
|
|
@@ -117,6 +115,9 @@ export class DocumentListComponent {
|
|
|
117
115
|
.subscribe());
|
|
118
116
|
}
|
|
119
117
|
_groupUploadedDocumentsByDate(docs) {
|
|
118
|
+
if (!docs || docs.length === 0) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
120
121
|
const groupedUploadedDocuments = new Map();
|
|
121
122
|
docs
|
|
122
123
|
.sort((a, b) => parseISO(b.indexationTime).getTime() - parseISO(a.indexationTime).getTime())
|
|
@@ -131,12 +132,10 @@ export class DocumentListComponent {
|
|
|
131
132
|
;
|
|
132
133
|
}
|
|
133
134
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list",
|
|
135
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
|
|
135
136
|
}
|
|
136
137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentListComponent, decorators: [{
|
|
137
138
|
type: Component,
|
|
138
|
-
args: [{ selector: "sq-document-list", standalone: true, providers: [
|
|
139
|
-
}]
|
|
140
|
-
type: Input
|
|
141
|
-
}] } });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixFQUFFLEVBQ0YsWUFBWSxFQUNaLFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHOUUsT0FBTyxFQUFFLG9CQUFv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LENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3RUFBd0U7WUFFL0osSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUM1Qyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFFRCx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUNuRixDQUFDOytHQXBLVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixxR0FIckIsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLDBCQ3BDckYsOG1EQTZCQSwwbkVEUVksWUFBWSxxVEFBRSxtQkFBbUIsNkVBQUUsYUFBYTs7NEZBRS9DLHFCQUFxQjtrQkFSakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxhQUNMLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxXQUMxRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLENBQUM7OEJBSWxELFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgY29tYmluZUxhdGVzdCxcbiAgRU1QVFksXG4gIGZpbHRlcixcbiAgb2YsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXBcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7XG4gIHBhcnNlSVNPLFxuICB0b0RhdGVcbn0gZnJvbSBcImRhdGUtZm5zXCI7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvU2NvcGUsIFRyYW5zbG9jb1BpcGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAanN2ZXJzZS90cmFuc2xvY28nO1xuXG5pbXBvcnQgeyBpc0F1dGhlbnRpY2F0ZWQgfSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IEluc3RhbmNlTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gXCIuLi8uLi9jaGF0LnNlcnZpY2VcIjtcbmltcG9ydCB7IEFzc2lzdGFudFV0aWxzIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzLnNlcnZpY2VcIjtcbmltcG9ydCB7IERvY3VtZW50c1VwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb3JtYXRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENoYXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFVwbG9hZGVkRG9jdW1lbnQgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LWxpc3RcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtEb2N1bWVudHNVcGxvYWRTZXJ2aWNlLCBwcm92aWRlVHJhbnNsb2NvU2NvcGUoJ2NoYXQtZG9jdW1lbnRzLXVwbG9hZCcpXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybWF0SWNvbkNvbXBvbmVudCwgVHJhbnNsb2NvUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIERlZmluZSB0aGUga2V5IGJhc2VkIG9uIGl0LCB0aGUgYXBwcm9wcmlhdGUgY2hhdFNlcnZpY2UgaW5zdGFuY2Ugd2lsbCBiZSByZXR1cm5lZCBmcm9tIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgKi9cbiAgQElucHV0KCkgaW5zdGFuY2VJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBjaGF0U2VydmljZTogQ2hhdFNlcnZpY2U7XG4gIHB1YmxpYyBncm91cGVkVXBsb2FkZWREb2N1bWVudHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IGtleTogc3RyaW5nOyB2YWx1ZTogVXBsb2FkZWREb2N1bWVudFtdfVtdPihbXSk7XG5cbiAgcHVibGljIGRvY3VtZW50VG9EZWxldGU/OiBVcGxvYWRlZERvY3VtZW50O1xuICBwdWJsaWMgZGVsZXRpbmdBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgcHVibGljIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSW5zdGFuY2VNYW5hZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jbyA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIG9mKGlzQXV0aGVudGljYXRlZCgpKS5waXBlKFxuICAgICAgICAgIHRhcCgoXykgPT4gdGhpcy5pbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jaGF0U2VydmljZS5hc3Npc3RhbnRDb25maWckKSxcbiAgICAgICAgICBmaWx0ZXIoKGNvbmZpZzogQ2hhdENvbmZpZyB8IHVuZGVmaW5lZCkgPT4gISFjb25maWcpLFxuICAgICAgICAgIHRhcCgoXykgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmluaXQodGhpcy5jaGF0U2VydmljZSkpLFxuICAgICAgICAgIHRhcCgoXykgPT4gdGhpcy51cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhdFNlcnZpY2UgPSB0aGlzLmluc3RhbmNlTWFuYWdlclNlcnZpY2UuZ2V0SW5zdGFuY2UodGhpcy5pbnN0YW5jZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cyBieSBmZXRjaGluZyB0aGUgbGF0ZXN0IGRhdGEgZnJvbSB0aGUgc2VydmljZS5cbiAgICogVGhlIGZldGNoZWQgZG9jdW1lbnRzIGFyZSBncm91cGVkIGJ5IGRhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgdXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKSxcbiAgICAgICAgdGhpcy50cmFuc2xvY28ubGFuZ0NoYW5nZXMkXG4gICAgICBdKS5waXBlKFxuICAgICAgICAgIHRhcCgoW3VwbG9hZGVkRG9jdW1lbnRzXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVXBsb2FkZWREb2N1bWVudHMkLm5leHQodGhpcy5fZ3JvdXBVcGxvYWRlZERvY3VtZW50c0J5RGF0ZSh1cGxvYWRlZERvY3VtZW50cy5kb2NzKSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZURvY3VtZW50KGV2ZW50OiBFdmVudCwgZG9jOiBVcGxvYWRlZERvY3VtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kb2N1bWVudFRvRGVsZXRlID0gZG9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFuIHVwbG9hZGVkIGRvY3VtZW50LiBUaGlzIG1ldGhvZCB0cmlnZ2VycyBhIGNvbmZpcm1hdGlvbiBtb2RhbFxuICAgKiB0byBlbnN1cmUgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCB3aXRoIHRoZSBkZWxldGlvbi4gSWYgY29uZmlybWVkLCBpdCBzZW5kcyBhIHJlcXVlc3RcbiAgICogdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBhbmQgcHJvdmlkZXMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdXBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gICAqIEBwYXJhbSBkb2MgLSBUaGUgZG9jdW1lbnQgdG8gYmUgZGVsZXRlZCwgcmVwcmVzZW50ZWQgYXMgYW4gaW5zdGFuY2Ugb2YgYFVwbG9hZGVkRG9jdW1lbnRgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIHRoZSBkb2N1bWVudC5cbiAgICogLSBTaG93cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHVwb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi5cbiAgICogLSBMb2dzIGFuZCBub3RpZmllcyB0aGUgdXNlciBvZiBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy5cbiAgICovXG4gIHBlcmZvcm1EZWxldGVEb2N1bWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmRlbGV0ZURvY3VtZW50cyhbdGhpcy5kb2N1bWVudFRvRGVsZXRlIS5pZF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3ModGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0RG9jdW1lbnRzVXBsb2FkLmRlbGV0ZURvY3VtZW50U3VjY2VzcycsIHsgdGl0bGU6IHRoaXMuZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWUgfSkpO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRUb0RlbGV0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGVEb2N1bWVudEVycm9yJywgeyB0aXRsZTogdGhpcy5kb2N1bWVudFRvRGVsZXRlIS5maWxlTmFtZSB9KSk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICB9XG5cbiAgZGVsZXRlQWxsRG9jdW1lbnRzKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kZWxldGluZ0FsbCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZGVsZXRpb24gb2YgYWxsIHVwbG9hZGVkIGRvY3VtZW50cy4gVGhpcyBtZXRob2QgdHJpZ2dlcnMgYSBjb25maXJtYXRpb24gbW9kYWxcbiAgICogdG8gZW5zdXJlIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgd2l0aCB0aGUgZGVsZXRpb24uIElmIGNvbmZpcm1lZCwgaXQgc2VuZHMgYSByZXF1ZXN0XG4gICAqIHRvIGRlbGV0ZSB0aGUgd2hvbGUgbGlzdCBvZiBkb2N1bWVudHMgYW5kIHByb3ZpZGVzIGZlZWRiYWNrIHRvIHRoZSB1c2VyIHVwb24gc3VjY2VzcyBvciBmYWlsdXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSAoT3B0aW9uYWwpIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIC0gRGlzcGxheXMgYSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS5cbiAgICogLSBPbiBjb25maXJtYXRpb24sIGRlbGV0ZXMgYWxsIGRvY3VtZW50cy5cbiAgICogLSBTaG93cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHVwb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi5cbiAgICogLSBMb2dzIGFuZCBub3RpZmllcyB0aGUgdXNlciBvZiBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy5cbiAgICovXG4gIHBlcmZvcm1EZWxldGVBbGxEb2N1bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5kZWxldGVBbGxEb2N1bWVudHMoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZWxldGluZ0FsbCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2Uuc3VjY2Vzcyh0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZGVsZXRlQWxsRG9jdW1lbnRzU3VjY2VzcycpKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGVBbGxEb2N1bWVudHNFcnJvcicpKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ3JvdXBVcGxvYWRlZERvY3VtZW50c0J5RGF0ZShkb2NzOiBVcGxvYWRlZERvY3VtZW50W10pOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVXBsb2FkZWREb2N1bWVudFtdIH1bXSB7XG4gICAgY29uc3QgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzID0gbmV3IE1hcDxzdHJpbmcsIFVwbG9hZGVkRG9jdW1lbnRbXT4oKTtcblxuICAgIGRvY3NcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBwYXJzZUlTTyhiLmluZGV4YXRpb25UaW1lKS5nZXRUaW1lKCkgLSBwYXJzZUlTTyhhLmluZGV4YXRpb25UaW1lKS5nZXRUaW1lKCkpXG4gICAgICAuZm9yRWFjaChkb2MgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5hc3Npc3RhbnRVdGlscy5nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhkb2MuaW5kZXhhdGlvblRpbWUpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgICAgaWYgKCFncm91cGVkVXBsb2FkZWREb2N1bWVudHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgICAgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5nZXQoZ3JvdXBLZXkpIS5wdXNoKGRvYyk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgKm5nSWY9XCJkZWxldGluZ0FsbFwiPlxuICA8c3Bhbj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGVBbGxEb2N1bWVudHNUZXh0JyB8IHRyYW5zbG9jbyB9fTwvc3Bhbj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IHctMTAwXCIgKGNsaWNrKT1cImRlbGV0aW5nQWxsPWZhbHNlXCI+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuY2FuY2VsJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMFwiIChjbGljayk9XCJwZXJmb3JtRGVsZXRlQWxsRG9jdW1lbnRzKClcIj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5jb25maXJtJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiAoZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCB8IGFzeW5jKVwiIGNsYXNzPVwidXBsb2FkZWQtZG9jc1wiPlxuICA8c3BhbiBjbGFzcz1cInVwbG9hZGVkLWRvY3MtZGF0ZVwiPnt7Z3JvdXAua2V5fX08L3NwYW4+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGRvYyBvZiBncm91cC52YWx1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZC1kb2MgcC0yXCI+XG4gICAgICA8c3EtZm9ybWF0LWljb24gW2V4dGVuc2lvbl09XCJkb2MuZmlsZUV4dFwiIGNsYXNzPVwibWUtMVwiPjwvc3EtZm9ybWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lLTFcIiBbdGl0bGVdPVwiZG9jLmZpbGVOYW1lXCI+e3tkb2MuZmlsZU5hbWV9fTwvc3Bhbj5cbiAgICAgIDxpIGNsYXNzPVwidXBsb2FkZWQtZG9jLWFjdGlvbnMgZmFzIGZhLXRyYXNoIG1zLTFcIiBbdGl0bGVdPVwiJ2NoYXREb2N1bWVudHNVcGxvYWQuZGVsZXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVEb2N1bWVudCgkZXZlbnQsIGRvYylcIj48L2k+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiICpuZ0lmPVwiZG9jdW1lbnRUb0RlbGV0ZSAmJiBkb2N1bWVudFRvRGVsZXRlLmlkID09PSBkb2MuaWRcIj5cbiAgICAgIDxzcGFuPlxuICAgICAgICB7eyAnY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGVEb2N1bWVudFRleHQnIHwgdHJhbnNsb2NvOiB7IHRpdGxlOiBkb2N1bWVudFRvRGVsZXRlIS5maWxlTmFtZSB9IH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IHctMTAwXCIgKGNsaWNrKT1cImRvY3VtZW50VG9EZWxldGU9dW5kZWZpbmVkXCI+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuY2FuY2VsJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDBcIiAoY2xpY2spPVwicGVyZm9ybURlbGV0ZURvY3VtZW50KClcIj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5jb25maXJtJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
139
|
+
args: [{ selector: "sq-document-list", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, FormatIconComponent, TranslocoPipe], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>{{ 'chatDocumentsUpload.deleteAllDocumentsText' | transloco }}</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [title]=\"doc.fileName\">{{doc.fileName}}</span>\n <button\n type=\"button\"\n (click)=\"deleteDocument($event, doc)\"\n [title]=\"'chatDocumentsUpload.delete' | transloco\"\n class=\"bg-transparent border-0 p-0 m-0 cursor-pointer text-inherit leading-none inline-flex items-center justify-center\"\n >\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\"></i>\n </button>\n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>\n {{ 'chatDocumentsUpload.deleteDocumentText' | transloco: { title: documentToDelete!.fileName } }}\n </span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">{{ 'chatDocumentsUpload.cancel' | transloco }}</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">{{ 'chatDocumentsUpload.confirm' | transloco }}</button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
140
|
+
}] });
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixLQUFLLEVBQ0wsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FB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QUM7WUFDN0MsQ0FBQztZQUVELHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFBQSxDQUFDO0lBQ25GLENBQUM7K0dBOUpVLHFCQUFxQjttR0FBckIscUJBQXFCLCtEQUhyQixDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUMsMEJDakM3RCwrekRBbUNBLDBuRUREWSxZQUFZLHFUQUFFLG1CQUFtQiw2RUFBRSxhQUFhOzs0RkFFL0MscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLGtCQUFrQixjQUdoQixJQUFJLGFBQ0wsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFdBQ2xELENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIEVNUFRZLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgcGFyc2VJU08sXG4gIHRvRGF0ZVxufSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IHByb3ZpZGVUcmFuc2xvY29TY29wZSwgVHJhbnNsb2NvUGlwZSwgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XG5cbmltcG9ydCB7IGlzQXV0aGVudGljYXRlZCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcblxuaW1wb3J0IHsgQXNzaXN0YW50VXRpbHMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHMuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvcm1hdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtYXQtaWNvbi9mb3JtYXQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBsb2FkZWREb2N1bWVudCB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLm1vZGVsXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3EtZG9jdW1lbnQtbGlzdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50LnNjc3NcIl0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVUcmFuc2xvY29TY29wZSgnY2hhdC1kb2N1bWVudHMtdXBsb2FkJyldLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtYXRJY29uQ29tcG9uZW50LCBUcmFuc2xvY29QaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFVwbG9hZGVkRG9jdW1lbnRbXX1bXT4oW10pO1xuXG4gIHB1YmxpYyBkb2N1bWVudFRvRGVsZXRlPzogVXBsb2FkZWREb2N1bWVudDtcbiAgcHVibGljIGRlbGV0aW5nQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xvY28gPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzaXN0YW50VXRpbHMgPSBpbmplY3QoQXNzaXN0YW50VXRpbHMpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBvZihpc0F1dGhlbnRpY2F0ZWQoKSkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuYXBwU2VydmljZS5pbml0KCkpLFxuICAgICAgICAgIHRhcCgoXykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cyBieSBmZXRjaGluZyB0aGUgbGF0ZXN0IGRhdGEgZnJvbSB0aGUgc2VydmljZS5cbiAgICogVGhlIGZldGNoZWQgZG9jdW1lbnRzIGFyZSBncm91cGVkIGJ5IGRhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25VcGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UudXBsb2FkZWREb2N1bWVudHMkLFxuICAgICAgICB0aGlzLnRyYW5zbG9jby5sYW5nQ2hhbmdlcyRcbiAgICAgIF0pLnBpcGUoXG4gICAgICAgICAgdGFwKChbdXBsb2FkZWREb2N1bWVudHNdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRVcGxvYWRlZERvY3VtZW50cyQubmV4dCh0aGlzLl9ncm91cFVwbG9hZGVkRG9jdW1lbnRzQnlEYXRlKHVwbG9hZGVkRG9jdW1lbnRzKSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBkZWxldGVEb2N1bWVudChldmVudDogRXZlbnQsIGRvYzogVXBsb2FkZWREb2N1bWVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZG9jdW1lbnRUb0RlbGV0ZSA9IGRvYztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBkZWxldGlvbiBvZiBhbiB1cGxvYWRlZCBkb2N1bWVudC4gVGhpcyBtZXRob2QgdHJpZ2dlcnMgYSBjb25maXJtYXRpb24gbW9kYWxcbiAgICogdG8gZW5zdXJlIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgd2l0aCB0aGUgZGVsZXRpb24uIElmIGNvbmZpcm1lZCwgaXQgc2VuZHMgYSByZXF1ZXN0XG4gICAqIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnQgYW5kIHByb3ZpZGVzIGZlZWRiYWNrIHRvIHRoZSB1c2VyIHVwb24gc3VjY2VzcyBvciBmYWlsdXJlLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgZXZlbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRlIGFjdGlvbiwgdXNlZCB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICAgKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGJlIGRlbGV0ZWQsIHJlcHJlc2VudGVkIGFzIGFuIGluc3RhbmNlIG9mIGBVcGxvYWRlZERvY3VtZW50YC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIGEgd2FybmluZyBtZXNzYWdlLlxuICAgKiAtIE9uIGNvbmZpcm1hdGlvbiwgZGVsZXRlcyB0aGUgZG9jdW1lbnQuXG4gICAqIC0gU2hvd3MgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXG4gICAqIC0gTG9ncyBhbmQgbm90aWZpZXMgdGhlIHVzZXIgb2YgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBwZXJmb3JtRGVsZXRlRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5kZWxldGVEb2N1bWVudHMoW3RoaXMuZG9jdW1lbnRUb0RlbGV0ZSEuaWRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5zdWNjZXNzKHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGVEb2N1bWVudFN1Y2Nlc3MnLCB7IHRpdGxlOiB0aGlzLmRvY3VtZW50VG9EZWxldGUhLmZpbGVOYW1lIH0pKTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VG9EZWxldGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZGVsZXRlRG9jdW1lbnRFcnJvcicsIHsgdGl0bGU6IHRoaXMuZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWUgfSkpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG5cbiAgfVxuXG4gIGRlbGV0ZUFsbERvY3VtZW50cyhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZGVsZXRpbmdBbGwgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFsbCB1cGxvYWRlZCBkb2N1bWVudHMuIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgY29uZmlybWF0aW9uIG1vZGFsXG4gICAqIHRvIGVuc3VyZSB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIHdpdGggdGhlIGRlbGV0aW9uLiBJZiBjb25maXJtZWQsIGl0IHNlbmRzIGEgcmVxdWVzdFxuICAgKiB0byBkZWxldGUgdGhlIHdob2xlIGxpc3Qgb2YgZG9jdW1lbnRzIGFuZCBwcm92aWRlcyBmZWVkYmFjayB0byB0aGUgdXNlciB1cG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gKE9wdGlvbmFsKSBUaGUgZXZlbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRlIGFjdGlvbiwgdXNlZCB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIGFsbCBkb2N1bWVudHMuXG4gICAqIC0gU2hvd3MgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXG4gICAqIC0gTG9ncyBhbmQgbm90aWZpZXMgdGhlIHVzZXIgb2YgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBwZXJmb3JtRGVsZXRlQWxsRG9jdW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZGVsZXRlQWxsRG9jdW1lbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVsZXRpbmdBbGwgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3ModGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdjaGF0RG9jdW1lbnRzVXBsb2FkLmRlbGV0ZUFsbERvY3VtZW50c1N1Y2Nlc3MnKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2NoYXREb2N1bWVudHNVcGxvYWQuZGVsZXRlQWxsRG9jdW1lbnRzRXJyb3InKSk7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dyb3VwVXBsb2FkZWREb2N1bWVudHNCeURhdGUoZG9jczogVXBsb2FkZWREb2N1bWVudFtdIHwgdW5kZWZpbmVkKTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IFVwbG9hZGVkRG9jdW1lbnRbXSB9W10ge1xuICAgIGlmICghZG9jcyB8fCBkb2NzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBncm91cGVkVXBsb2FkZWREb2N1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgVXBsb2FkZWREb2N1bWVudFtdPigpO1xuXG4gICAgZG9jc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKGRvYyA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLmFzc2lzdGFudFV0aWxzLmdldFRpbWVLZXkodG9EYXRlKHBhcnNlSVNPKGRvYy5pbmRleGF0aW9uVGltZSkpKTsgLy8gTXVzdCBjb252ZXJ0IHRoZSBVVEMgZGF0ZSB0byBsb2NhbCBkYXRlIGJlZm9yZSBwYXNzaW5nIHRvIF9nZXRUaW1lS2V5XG5cbiAgICAgICAgICBpZiAoIWdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5oYXMoZ3JvdXBLZXkpKSB7XG4gICAgICAgICAgICBncm91cGVkVXBsb2FkZWREb2N1bWVudHMuc2V0KGdyb3VwS2V5LCBbXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzLmdldChncm91cEtleSkhLnB1c2goZG9jKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzLCAoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTs7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiAqbmdJZj1cImRlbGV0aW5nQWxsXCI+XG4gIDxzcGFuPnt7ICdjaGF0RG9jdW1lbnRzVXBsb2FkLmRlbGV0ZUFsbERvY3VtZW50c1RleHQnIHwgdHJhbnNsb2NvIH19PC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgdy0xMDBcIiAoY2xpY2spPVwiZGVsZXRpbmdBbGw9ZmFsc2VcIj57eyAnY2hhdERvY3VtZW50c1VwbG9hZC5jYW5jZWwnIHwgdHJhbnNsb2NvIH19PC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cInBlcmZvcm1EZWxldGVBbGxEb2N1bWVudHMoKVwiPnt7ICdjaGF0RG9jdW1lbnRzVXBsb2FkLmNvbmZpcm0nIHwgdHJhbnNsb2NvIH19PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIChncm91cGVkVXBsb2FkZWREb2N1bWVudHMkIHwgYXN5bmMpXCIgY2xhc3M9XCJ1cGxvYWRlZC1kb2NzXCI+XG4gIDxzcGFuIGNsYXNzPVwidXBsb2FkZWQtZG9jcy1kYXRlXCI+e3tncm91cC5rZXl9fTwvc3Bhbj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgZG9jIG9mIGdyb3VwLnZhbHVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZGVkLWRvYyBwLTJcIj5cbiAgICAgIDxzcS1mb3JtYXQtaWNvbiBbZXh0ZW5zaW9uXT1cImRvYy5maWxlRXh0XCIgY2xhc3M9XCJtZS0xXCI+PC9zcS1mb3JtYXQtaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGUgbWUtMVwiIFt0aXRsZV09XCJkb2MuZmlsZU5hbWVcIj57e2RvYy5maWxlTmFtZX19PC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURvY3VtZW50KCRldmVudCwgZG9jKVwiXG4gICAgICAgIFt0aXRsZV09XCInY2hhdERvY3VtZW50c1VwbG9hZC5kZWxldGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgY2xhc3M9XCJiZy10cmFuc3BhcmVudCBib3JkZXItMCBwLTAgbS0wIGN1cnNvci1wb2ludGVyIHRleHQtaW5oZXJpdCBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJ1cGxvYWRlZC1kb2MtYWN0aW9ucyBmYXMgZmEtdHJhc2ggbXMtMVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiAqbmdJZj1cImRvY3VtZW50VG9EZWxldGUgJiYgZG9jdW1lbnRUb0RlbGV0ZS5pZCA9PT0gZG9jLmlkXCI+XG4gICAgICA8c3Bhbj5cbiAgICAgICAge3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuZGVsZXRlRG9jdW1lbnRUZXh0JyB8IHRyYW5zbG9jbzogeyB0aXRsZTogZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWUgfSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCB3LTEwMFwiIChjbGljayk9XCJkb2N1bWVudFRvRGVsZXRlPXVuZGVmaW5lZFwiPnt7ICdjaGF0RG9jdW1lbnRzVXBsb2FkLmNhbmNlbCcgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cInBlcmZvcm1EZWxldGVEb2N1bWVudCgpXCI+e3sgJ2NoYXREb2N1bWVudHNVcGxvYWQuY29uZmlybScgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import { CommonModule } from "@angular/common";
|
|
2
2
|
import { Component, EventEmitter, inject, Input, Output } from "@angular/core";
|
|
3
|
-
import {
|
|
3
|
+
import { catchError, EMPTY, of, Subscription, switchMap, tap } from "rxjs";
|
|
4
4
|
import { provideTranslocoScope, TranslocoPipe } from '@jsverse/transloco';
|
|
5
5
|
import { isAuthenticated } from "@sinequa/atomic";
|
|
6
|
-
import { InstanceManagerService } from "../../instance-manager.service";
|
|
7
6
|
import { DocumentsUploadService } from "../documents-upload.service";
|
|
8
7
|
import { NotificationsService } from "../../services/notification.service";
|
|
8
|
+
import { AppService } from "../../services/app.service";
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@angular/common";
|
|
11
11
|
export class DocumentOverviewComponent {
|
|
12
12
|
constructor() {
|
|
13
13
|
this.disabledUpload = true;
|
|
14
14
|
this.onUpload = new EventEmitter();
|
|
15
|
-
this.uploadedDocuments$ = new BehaviorSubject([]);
|
|
16
15
|
this._subscription = new Subscription();
|
|
17
|
-
this.instanceManagerService = inject(InstanceManagerService);
|
|
18
16
|
this.documentsUploadService = inject(DocumentsUploadService);
|
|
19
17
|
this.notificationsService = inject(NotificationsService);
|
|
18
|
+
this.appService = inject(AppService);
|
|
20
19
|
}
|
|
21
|
-
;
|
|
22
20
|
ngOnInit() {
|
|
23
|
-
this._subscription.add(of(isAuthenticated()).pipe(
|
|
21
|
+
this._subscription.add(of(isAuthenticated()).pipe(switchMap((_) => this.appService.init()), tap((_) => this.documentsUploadService.getDocumentsList()), catchError((error) => {
|
|
24
22
|
console.error(error);
|
|
25
23
|
this.notificationsService.error(error);
|
|
26
24
|
return EMPTY;
|
|
@@ -30,36 +28,15 @@ export class DocumentOverviewComponent {
|
|
|
30
28
|
ngOnDestroy() {
|
|
31
29
|
this._subscription.unsubscribe();
|
|
32
30
|
}
|
|
33
|
-
instantiateChatService() {
|
|
34
|
-
this.chatService = this.instanceManagerService.getInstance(this.instanceId);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Updates the list of uploaded documents by fetching the latest data from the service.
|
|
38
|
-
*
|
|
39
|
-
* @returns {void}
|
|
40
|
-
*/
|
|
41
|
-
updateUploadedDocumentsList() {
|
|
42
|
-
this._subscription.add(this.documentsUploadService.getDocumentsList()
|
|
43
|
-
.pipe(tap((uploadedDocuments) => {
|
|
44
|
-
this.uploadedDocuments$.next(uploadedDocuments.docs);
|
|
45
|
-
}), catchError((error) => {
|
|
46
|
-
console.error(error);
|
|
47
|
-
this.notificationsService.error(error);
|
|
48
|
-
return EMPTY;
|
|
49
|
-
}), take(1))
|
|
50
|
-
.subscribe());
|
|
51
|
-
}
|
|
52
31
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
53
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: {
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [provideTranslocoScope('chat-documents-upload')], ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button disabled class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }] }); }
|
|
54
33
|
}
|
|
55
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
|
|
56
35
|
type: Component,
|
|
57
|
-
args: [{ selector: "sq-document-overview", standalone: true, providers: [
|
|
58
|
-
}], propDecorators: {
|
|
59
|
-
type: Input
|
|
60
|
-
}], disabledUpload: [{
|
|
36
|
+
args: [{ selector: "sq-document-overview", standalone: true, providers: [provideTranslocoScope('chat-documents-upload')], imports: [CommonModule, TranslocoPipe], template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">\n {{ 'chatDocumentsUpload.uploadedDocuments' | transloco: { count: (documentsUploadService.uploadedDocuments$ | async)?.length || 0 } }}\n </span>\n <button disabled class=\"btn btn-light\" [title]=\"'chatDocumentsUpload.uploadToSources' | transloco\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>\n", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
|
|
37
|
+
}], propDecorators: { disabledUpload: [{
|
|
61
38
|
type: Input
|
|
62
39
|
}], onUpload: [{
|
|
63
40
|
type: Output
|
|
64
41
|
}] } });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQWV4RCxNQUFNLE9BQU8seUJBQXlCO0lBYnRDO1FBY1csbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFOUIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFaEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXBDLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7S0FxQnhDO0lBbkJDLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDeEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUMxRCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzsrR0E1QlUseUJBQXlCO21HQUF6Qix5QkFBeUIsb0pBVHpCLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQywwQkN0QjdELHdjQVFBLGdIRGVZLFlBQVksK0VBQUUsYUFBYTs7NEZBUTFCLHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxhQUNMLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxXQUNsRCxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7OEJBUzdCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRhcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcHJvdmlkZVRyYW5zbG9jb1Njb3BlLCBUcmFuc2xvY29QaXBlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgaXNBdXRoZW50aWNhdGVkIH0gZnJvbSBcIkBzaW5lcXVhL2F0b21pY1wiO1xuXG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LW92ZXJ2aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbcHJvdmlkZVRyYW5zbG9jb1Njb3BlKCdjaGF0LWRvY3VtZW50cy11cGxvYWQnKV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbG9jb1BpcGVdLFxuICBzdHlsZXM6IFtgXG4ub3ZlcnZpZXctdGV4dCB7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgcGFkZGluZzogLjVyZW0gLjhyZW07XG59XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50T3ZlcnZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGRpc2FibGVkVXBsb2FkOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25VcGxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgb2YoaXNBdXRoZW50aWNhdGVkKCkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB0aGlzLmFwcFNlcnZpY2UuaW5pdCgpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5nZXREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgPHNwYW4gY2xhc3M9XCJvdmVydmlldy10ZXh0IGZsZXgtZ3Jvdy0xXCI+XG4gICAge3sgJ2NoYXREb2N1bWVudHNVcGxvYWQudXBsb2FkZWREb2N1bWVudHMnIHwgdHJhbnNsb2NvOiB7IGNvdW50OiAoZG9jdW1lbnRzVXBsb2FkU2VydmljZS51cGxvYWRlZERvY3VtZW50cyQgfCBhc3luYyk/Lmxlbmd0aCB8fCAwIH0gfX1cbiAgPC9zcGFuPlxuICA8YnV0dG9uIGRpc2FibGVkIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIFt0aXRsZV09XCInY2hhdERvY3VtZW50c1VwbG9hZC51cGxvYWRUb1NvdXJjZXMnIHwgdHJhbnNsb2NvXCIgKGNsaWNrKT1cIm9uVXBsb2FkLmVtaXQoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFVwbG9hZFwiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|