@sinequa/assistant 3.8.0 → 3.9.0
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/charts/chart/chart.component.d.ts +13 -13
- package/chat/chat-message/chat-message.component.d.ts +85 -81
- package/chat/chat-message/i18n/en.json +11 -0
- package/chat/chat-message/i18n/fr.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +14 -14
- package/chat/chat-reference/i18n/en.json +4 -0
- package/chat/chat-reference/i18n/fr.json +4 -0
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
- package/chat/chat-settings-v3/i18n/en.json +14 -0
- package/chat/chat-settings-v3/i18n/fr.json +14 -0
- package/chat/chat.component.d.ts +388 -1405
- package/chat/chat.service.d.ts +247 -228
- package/chat/debug-message/debug-message.component.d.ts +17 -17
- package/chat/debug-message/i18n/en.json +3 -0
- package/chat/debug-message/i18n/fr.json +3 -0
- package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
- package/chat/dialogs/i18n/en.json +19 -0
- package/chat/dialogs/i18n/fr.json +19 -0
- package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
- package/chat/dialogs/updates.component.d.ts +15 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
- package/chat/documents-upload/documents-upload.model.d.ts +66 -66
- package/chat/documents-upload/documents-upload.service.d.ts +170 -174
- package/chat/documents-upload/i18n/en.json +24 -0
- package/chat/documents-upload/i18n/fr.json +24 -0
- package/chat/format-icon/format-icon.component.d.ts +10 -10
- package/chat/format-icon/icons.d.ts +5 -5
- package/chat/i18n/en.json +42 -0
- package/chat/i18n/fr.json +42 -0
- package/chat/index.d.ts +5 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
- package/chat/instance-manager.service.d.ts +28 -28
- package/chat/pipes/message-content.pipe.d.ts +16 -0
- package/chat/prompt.component.d.ts +25 -21
- package/chat/public-api.d.ts +17 -17
- package/chat/references/i18n/en.json +6 -0
- package/chat/references/i18n/fr.json +6 -0
- package/chat/references/inline-image-reference.d.ts +21 -0
- package/chat/references/inline-page-reference.d.ts +21 -0
- package/chat/rest-chat.service.d.ts +31 -33
- package/chat/saved-chats/i18n/en.json +4 -0
- package/chat/saved-chats/i18n/fr.json +4 -0
- package/chat/saved-chats/saved-chats.component.d.ts +30 -36
- package/chat/services/app.service.d.ts +8 -0
- package/chat/services/dialog.service.d.ts +12 -0
- package/chat/services/notification.service.d.ts +10 -0
- package/chat/services/principal.service.d.ts +7 -0
- package/chat/services/search.service.d.ts +7 -0
- package/chat/services/signalR.web.service.d.ts +45 -0
- package/chat/services/ui.service.d.ts +13 -0
- package/chat/services/user-settings.service.d.ts +7 -0
- package/chat/token-progress-bar/i18n/en.json +4 -0
- package/chat/token-progress-bar/i18n/fr.json +4 -0
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
- package/chat/tooltip/tooltip.component.d.ts +12 -0
- package/chat/tooltip/tooltip.directive.d.ts +81 -0
- package/chat/types/message-content.types.d.ts +54 -0
- package/chat/types/message-reference.types.d.ts +11 -0
- package/chat/types.d.ts +913 -873
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
- package/chat/utils/assistant-json.d.ts +2 -0
- package/chat/websocket-chat.service.d.ts +102 -103
- package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
- package/esm2022/chat/chat.component.mjs +1090 -0
- package/esm2022/chat/chat.service.mjs +417 -0
- package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
- package/esm2022/chat/dialogs/updates.component.mjs +61 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
- package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
- package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
- package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
- package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
- package/esm2022/chat/instance-manager.service.mjs +46 -0
- package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
- package/esm2022/chat/prompt.component.mjs +88 -0
- package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
- package/esm2022/chat/references/inline-image-reference.mjs +110 -0
- package/esm2022/chat/references/inline-page-reference.mjs +110 -0
- package/esm2022/chat/rest-chat.service.mjs +296 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
- package/esm2022/chat/services/app.service.mjs +19 -0
- package/esm2022/chat/services/dialog.service.mjs +40 -0
- package/esm2022/chat/services/notification.service.mjs +25 -0
- package/esm2022/chat/services/principal.service.mjs +16 -0
- package/esm2022/chat/services/search.service.mjs +13 -0
- package/esm2022/chat/services/signalR.web.service.mjs +79 -0
- package/esm2022/chat/services/ui.service.mjs +61 -0
- package/esm2022/chat/services/user-settings.service.mjs +22 -0
- package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
- package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
- package/esm2022/chat/types/message-content.types.mjs +2 -0
- package/esm2022/chat/types/message-reference.types.mjs +2 -0
- package/esm2022/chat/types.mjs +130 -0
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
- package/esm2022/chat/utils/assistant-json.mjs +12 -0
- package/esm2022/chat/websocket-chat.service.mjs +654 -0
- package/{esm2020 → esm2022}/public-api.mjs +2 -2
- package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
- package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
- package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
- package/index.d.ts +5 -5
- package/package.json +52 -25
- package/public-api.d.ts +1 -1
- package/chat/messages/de.d.ts +0 -4
- package/chat/messages/en.d.ts +0 -4
- package/chat/messages/fr.d.ts +0 -4
- package/chat/messages/index.d.ts +0 -4
- package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
- package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
- package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
- package/esm2020/chat/chat.component.mjs +0 -1069
- package/esm2020/chat/chat.service.mjs +0 -333
- package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
- package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
- package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
- package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
- package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
- package/esm2020/chat/instance-manager.service.mjs +0 -46
- package/esm2020/chat/messages/de.mjs +0 -4
- package/esm2020/chat/messages/en.mjs +0 -4
- package/esm2020/chat/messages/fr.mjs +0 -4
- package/esm2020/chat/messages/index.mjs +0 -9
- package/esm2020/chat/prompt.component.mjs +0 -88
- package/esm2020/chat/rest-chat.service.mjs +0 -241
- package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
- package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
- package/esm2020/chat/types.mjs +0 -112
- package/esm2020/chat/websocket-chat.service.mjs +0 -641
- package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
- package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
- package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
- package/fesm2020/sinequa-assistant.mjs +0 -9
- package/fesm2020/sinequa-assistant.mjs.map +0 -1
- /package/{fesm2015 → fesm2022}/sinequa-assistant.mjs.map +0 -0
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, inject, Input } from "@angular/core";
|
|
3
|
-
import { BehaviorSubject, catchError, EMPTY, filter, Subscription, switchMap, take, tap } from "rxjs";
|
|
4
|
-
import { differenceInDays, differenceInMonths, differenceInYears, endOfYesterday, isThisMonth, isThisQuarter, isThisWeek, isThisYear, isToday, isYesterday, format, parseISO, toDate } from "date-fns";
|
|
5
|
-
import { LoginService } from "@sinequa/core/login";
|
|
6
|
-
import { NotificationsService } from "@sinequa/core/notification";
|
|
7
|
-
import { UtilsModule } from "@sinequa/components/utils";
|
|
8
|
-
import { AbstractFacet } from "@sinequa/components/facet";
|
|
9
|
-
import { Action } from "@sinequa/components/action";
|
|
10
|
-
import { InstanceManagerService } from "../../instance-manager.service";
|
|
11
|
-
import { DocumentsUploadService } from "../documents-upload.service";
|
|
12
|
-
import { FormatIconComponent } from '../../format-icon/format-icon.component';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@angular/common";
|
|
15
|
-
import * as i2 from "@sinequa/components/utils";
|
|
16
|
-
export class DocumentListComponent extends AbstractFacet {
|
|
17
|
-
constructor() {
|
|
18
|
-
super();
|
|
19
|
-
this.groupedUploadedDocuments$ = new BehaviorSubject([]);
|
|
20
|
-
this.deletingAll = false;
|
|
21
|
-
this._subscription = new Subscription();
|
|
22
|
-
this._actions = [];
|
|
23
|
-
this._updateDocumentsListAction = new Action({
|
|
24
|
-
icon: 'fas fa-sync',
|
|
25
|
-
title: "Refresh",
|
|
26
|
-
action: () => this.updateUploadedDocumentsList()
|
|
27
|
-
});
|
|
28
|
-
this._deleteAllDocumentsAction = new Action({
|
|
29
|
-
icon: 'fas fa-trash',
|
|
30
|
-
title: "Delete all",
|
|
31
|
-
action: () => this.deleteAllDocuments()
|
|
32
|
-
});
|
|
33
|
-
this.loginService = inject(LoginService);
|
|
34
|
-
this.instanceManagerService = inject(InstanceManagerService);
|
|
35
|
-
this.documentsUploadService = inject(DocumentsUploadService);
|
|
36
|
-
this.notificationsService = inject(NotificationsService);
|
|
37
|
-
this._actions = [this._updateDocumentsListAction, this._deleteAllDocumentsAction];
|
|
38
|
-
}
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
this._subscription.add(this.loginService.events
|
|
41
|
-
.pipe(filter((e) => e.type === "login-complete"), tap((_) => this.instantiateChatService()), switchMap((_) => this.chatService.assistantConfig$), filter((config) => !!config), tap((_) => this.documentsUploadService.init(this.chatService)), tap((_) => this.updateUploadedDocumentsList()), catchError((error) => {
|
|
42
|
-
console.error(error);
|
|
43
|
-
this.notificationsService.error(error);
|
|
44
|
-
return EMPTY;
|
|
45
|
-
}))
|
|
46
|
-
.subscribe());
|
|
47
|
-
}
|
|
48
|
-
ngOnDestroy() {
|
|
49
|
-
this._subscription.unsubscribe();
|
|
50
|
-
}
|
|
51
|
-
get actions() { return this._actions; }
|
|
52
|
-
instantiateChatService() {
|
|
53
|
-
this.chatService = this.instanceManagerService.getInstance(this.instanceId);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Updates the list of uploaded documents by fetching the latest data from the service.
|
|
57
|
-
* The fetched documents are grouped by date.
|
|
58
|
-
*
|
|
59
|
-
* @returns {void}
|
|
60
|
-
*/
|
|
61
|
-
updateUploadedDocumentsList() {
|
|
62
|
-
this._subscription.add(this.documentsUploadService.getDocumentsList()
|
|
63
|
-
.pipe(tap((uploadedDocuments) => {
|
|
64
|
-
this.groupedUploadedDocuments$.next(this._groupUploadedDocumentsByDate(uploadedDocuments.docs));
|
|
65
|
-
}), catchError((error) => {
|
|
66
|
-
console.error(error);
|
|
67
|
-
this.notificationsService.error(error);
|
|
68
|
-
return EMPTY;
|
|
69
|
-
}), take(1))
|
|
70
|
-
.subscribe());
|
|
71
|
-
}
|
|
72
|
-
deleteDocument(event, doc) {
|
|
73
|
-
event.stopPropagation();
|
|
74
|
-
this.documentToDelete = doc;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Handles the deletion of an uploaded document. This method triggers a confirmation modal
|
|
78
|
-
* to ensure the user wants to proceed with the deletion. If confirmed, it sends a request
|
|
79
|
-
* to delete the document and provides feedback to the user upon success or failure.
|
|
80
|
-
*
|
|
81
|
-
* @param event - The event object associated with the delete action, used to stop propagation.
|
|
82
|
-
* @param doc - The document to be deleted, represented as an instance of `UploadedDocument`.
|
|
83
|
-
*
|
|
84
|
-
* @remarks
|
|
85
|
-
* - Displays a confirmation modal with a warning message.
|
|
86
|
-
* - On confirmation, deletes the document.
|
|
87
|
-
* - Shows a success notification upon successful deletion.
|
|
88
|
-
* - Logs and notifies the user of any errors encountered during the deletion process.
|
|
89
|
-
*/
|
|
90
|
-
performDeleteDocument() {
|
|
91
|
-
this._subscription.add(this.documentsUploadService.deleteDocuments([this.documentToDelete.id])
|
|
92
|
-
.pipe(tap(() => {
|
|
93
|
-
this.notificationsService.success(`The document "${this.documentToDelete.fileName}" has been successfully deleted.`);
|
|
94
|
-
this.documentToDelete = undefined;
|
|
95
|
-
this.updateUploadedDocumentsList();
|
|
96
|
-
}), catchError((error) => {
|
|
97
|
-
console.error(error);
|
|
98
|
-
this.notificationsService.error(error);
|
|
99
|
-
return EMPTY;
|
|
100
|
-
}), take(1))
|
|
101
|
-
.subscribe());
|
|
102
|
-
}
|
|
103
|
-
deleteAllDocuments(event) {
|
|
104
|
-
event?.stopPropagation();
|
|
105
|
-
this.deletingAll = true;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Handles the deletion of all uploaded documents. This method triggers a confirmation modal
|
|
109
|
-
* to ensure the user wants to proceed with the deletion. If confirmed, it sends a request
|
|
110
|
-
* to delete the whole list of documents and provides feedback to the user upon success or failure.
|
|
111
|
-
*
|
|
112
|
-
* @param event - (Optional) The event object associated with the delete action, used to stop propagation.
|
|
113
|
-
*
|
|
114
|
-
* @remarks
|
|
115
|
-
* - Displays a confirmation modal with a warning message.
|
|
116
|
-
* - On confirmation, deletes all documents.
|
|
117
|
-
* - Shows a success notification upon successful deletion.
|
|
118
|
-
* - Logs and notifies the user of any errors encountered during the deletion process.
|
|
119
|
-
*/
|
|
120
|
-
performDeleteAllDocuments() {
|
|
121
|
-
this._subscription.add(this.documentsUploadService.deleteAllDocuments()
|
|
122
|
-
.pipe(tap(() => {
|
|
123
|
-
this.deletingAll = false;
|
|
124
|
-
this.notificationsService.success(`All documents have been successfully deleted.`);
|
|
125
|
-
this.updateUploadedDocumentsList();
|
|
126
|
-
}), catchError((error) => {
|
|
127
|
-
console.error(error);
|
|
128
|
-
this.notificationsService.error(error);
|
|
129
|
-
return EMPTY;
|
|
130
|
-
}), take(1))
|
|
131
|
-
.subscribe());
|
|
132
|
-
}
|
|
133
|
-
_groupUploadedDocumentsByDate(docs) {
|
|
134
|
-
const groupedUploadedDocuments = new Map();
|
|
135
|
-
docs
|
|
136
|
-
.sort((a, b) => parseISO(b.indexationTime).getTime() - parseISO(a.indexationTime).getTime())
|
|
137
|
-
.forEach(doc => {
|
|
138
|
-
const groupKey = this._getTimeKey(toDate(parseISO(doc.indexationTime))); // Must convert the UTC date to local date before passing to _getTimeKey
|
|
139
|
-
if (!groupedUploadedDocuments.has(groupKey)) {
|
|
140
|
-
groupedUploadedDocuments.set(groupKey, []);
|
|
141
|
-
}
|
|
142
|
-
groupedUploadedDocuments.get(groupKey).push(doc);
|
|
143
|
-
});
|
|
144
|
-
return Array.from(groupedUploadedDocuments, ([key, value]) => ({ key, value }));
|
|
145
|
-
;
|
|
146
|
-
}
|
|
147
|
-
_getTimeKey(date) {
|
|
148
|
-
if (isToday(date)) {
|
|
149
|
-
return 'Today';
|
|
150
|
-
}
|
|
151
|
-
else if (isYesterday(date)) {
|
|
152
|
-
return 'Yesterday';
|
|
153
|
-
}
|
|
154
|
-
else if (isThisWeek(date)) {
|
|
155
|
-
return 'This week';
|
|
156
|
-
}
|
|
157
|
-
else if (differenceInDays(endOfYesterday(), date) <= 7) {
|
|
158
|
-
return 'Last week';
|
|
159
|
-
}
|
|
160
|
-
else if (isThisMonth(date)) {
|
|
161
|
-
return 'This month';
|
|
162
|
-
}
|
|
163
|
-
else if (differenceInMonths(endOfYesterday(), date) <= 1) {
|
|
164
|
-
return 'Last month';
|
|
165
|
-
}
|
|
166
|
-
else if (isThisQuarter(date)) {
|
|
167
|
-
return 'This quarter';
|
|
168
|
-
}
|
|
169
|
-
else if (differenceInMonths(endOfYesterday(), date) <= 3) {
|
|
170
|
-
return 'Last quarter';
|
|
171
|
-
}
|
|
172
|
-
else if (isThisYear(date)) {
|
|
173
|
-
return 'This year';
|
|
174
|
-
}
|
|
175
|
-
else if (differenceInYears(endOfYesterday(), date) === 1) {
|
|
176
|
-
return 'Last year';
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
return format(date, 'yyyy');
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
DocumentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
184
|
-
DocumentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", inputs: { instanceId: "instanceId" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>You are about to delete all the documents. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</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\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\n (click)=\"deleteDocument($event, doc)\"></i> \n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\n </div>\n </div>\n </div>\n</div>", 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: "ngmodule", type: UtilsModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }] });
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentListComponent, decorators: [{
|
|
186
|
-
type: Component,
|
|
187
|
-
args: [{ selector: "sq-document-list", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, FormatIconComponent, UtilsModule], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>You are about to delete all the documents. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</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\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\n (click)=\"deleteDocument($event, doc)\"></i> \n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\n </div>\n </div>\n </div>\n</div>", 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"] }]
|
|
188
|
-
}], ctorParameters: function () { return []; }, propDecorators: { instanceId: [{
|
|
189
|
-
type: Input
|
|
190
|
-
}] } });
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLE9BQU8sRUFDUCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0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LFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgRU1QVFksXG4gIGZpbHRlcixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZGlmZmVyZW5jZUluTW9udGhzLFxuICBkaWZmZXJlbmNlSW5ZZWFycyxcbiAgZW5kT2ZZZXN0ZXJkYXksXG4gIGlzVGhpc01vbnRoLFxuICBpc1RoaXNRdWFydGVyLFxuICBpc1RoaXNXZWVrLFxuICBpc1RoaXNZZWFyLFxuICBpc1RvZGF5LFxuICBpc1llc3RlcmRheSxcbiAgZm9ybWF0LFxuICBwYXJzZUlTTyxcbiAgdG9EYXRlXG59IGZyb20gXCJkYXRlLWZuc1wiO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbG9naW5cIjtcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbm90aWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBVdGlsc01vZHVsZSB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdEZhY2V0IH0gZnJvbSBcIkBzaW5lcXVhL2NvbXBvbmVudHMvZmFjZXRcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2FjdGlvblwiO1xuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvcm1hdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtYXQtaWNvbi9mb3JtYXQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhdENvbmZpZyB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgVXBsb2FkZWREb2N1bWVudCwgVXBsb2FkZWREb2N1bWVudHMgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3EtZG9jdW1lbnQtbGlzdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50LnNjc3NcIl0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0RvY3VtZW50c1VwbG9hZFNlcnZpY2VdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtYXRJY29uQ29tcG9uZW50LCBVdGlsc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50TGlzdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmFjZXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBwdWJsaWMgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFVwbG9hZGVkRG9jdW1lbnRbXX1bXT4oW10pO1xuXG4gIHB1YmxpYyBkb2N1bWVudFRvRGVsZXRlPzogVXBsb2FkZWREb2N1bWVudDtcbiAgcHVibGljIGRlbGV0aW5nQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9hY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uID0gbmV3IEFjdGlvbih7XG4gICAgaWNvbjogJ2ZhcyBmYS1zeW5jJyxcbiAgICB0aXRsZTogXCJSZWZyZXNoXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpXG4gIH0pO1xuICBwcml2YXRlIF9kZWxldGVBbGxEb2N1bWVudHNBY3Rpb24gPSBuZXcgQWN0aW9uKHtcbiAgICBpY29uOiAnZmFzIGZhLXRyYXNoJyxcbiAgICB0aXRsZTogXCJEZWxldGUgYWxsXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLmRlbGV0ZUFsbERvY3VtZW50cygpXG4gIH0pO1xuXG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSW5zdGFuY2VNYW5hZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fYWN0aW9ucyA9IFt0aGlzLl91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uLCB0aGlzLl9kZWxldGVBbGxEb2N1bWVudHNBY3Rpb25dO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudHlwZSA9PT0gXCJsb2dpbi1jb21wbGV0ZVwiKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zOyB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMgYnkgZmV0Y2hpbmcgdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHNlcnZpY2UuXG4gICAqIFRoZSBmZXRjaGVkIGRvY3VtZW50cyBhcmUgZ3JvdXBlZCBieSBkYXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHVwbG9hZGVkRG9jdW1lbnRzOiBVcGxvYWRlZERvY3VtZW50cykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVXBsb2FkZWREb2N1bWVudHMkLm5leHQodGhpcy5fZ3JvdXBVcGxvYWRlZERvY3VtZW50c0J5RGF0ZSh1cGxvYWRlZERvY3VtZW50cy5kb2NzKSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZURvY3VtZW50KGV2ZW50OiBFdmVudCwgZG9jOiBVcGxvYWRlZERvY3VtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kb2N1bWVudFRvRGVsZXRlID0gZG9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFuIHVwbG9hZGVkIGRvY3VtZW50LiBUaGlzIG1ldGhvZCB0cmlnZ2VycyBhIGNvbmZpcm1hdGlvbiBtb2RhbFxuICAgKiB0byBlbnN1cmUgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCB3aXRoIHRoZSBkZWxldGlvbi4gSWYgY29uZmlybWVkLCBpdCBzZW5kcyBhIHJlcXVlc3RcbiAgICogdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBhbmQgcHJvdmlkZXMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdXBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gICAqIEBwYXJhbSBkb2MgLSBUaGUgZG9jdW1lbnQgdG8gYmUgZGVsZXRlZCwgcmVwcmVzZW50ZWQgYXMgYW4gaW5zdGFuY2Ugb2YgYFVwbG9hZGVkRG9jdW1lbnRgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIHRoZSBkb2N1bWVudC5cbiAgICogLSBTaG93cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHVwb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi5cbiAgICogLSBMb2dzIGFuZCBub3RpZmllcyB0aGUgdXNlciBvZiBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy5cbiAgICovXG4gIHBlcmZvcm1EZWxldGVEb2N1bWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmRlbGV0ZURvY3VtZW50cyhbdGhpcy5kb2N1bWVudFRvRGVsZXRlIS5pZF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYFRoZSBkb2N1bWVudCBcIiR7dGhpcy5kb2N1bWVudFRvRGVsZXRlIS5maWxlTmFtZX1cIiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5gKTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VG9EZWxldGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICB9XG5cbiAgZGVsZXRlQWxsRG9jdW1lbnRzKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kZWxldGluZ0FsbCA9IHRydWU7IFxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFsbCB1cGxvYWRlZCBkb2N1bWVudHMuIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgY29uZmlybWF0aW9uIG1vZGFsXG4gICAqIHRvIGVuc3VyZSB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIHdpdGggdGhlIGRlbGV0aW9uLiBJZiBjb25maXJtZWQsIGl0IHNlbmRzIGEgcmVxdWVzdFxuICAgKiB0byBkZWxldGUgdGhlIHdob2xlIGxpc3Qgb2YgZG9jdW1lbnRzIGFuZCBwcm92aWRlcyBmZWVkYmFjayB0byB0aGUgdXNlciB1cG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gKE9wdGlvbmFsKSBUaGUgZXZlbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRlIGFjdGlvbiwgdXNlZCB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIGFsbCBkb2N1bWVudHMuXG4gICAqIC0gU2hvd3MgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXG4gICAqIC0gTG9ncyBhbmQgbm90aWZpZXMgdGhlIHVzZXIgb2YgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBwZXJmb3JtRGVsZXRlQWxsRG9jdW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZGVsZXRlQWxsRG9jdW1lbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVsZXRpbmdBbGwgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYEFsbCBkb2N1bWVudHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxldGVkLmApO1xuICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9ncm91cFVwbG9hZGVkRG9jdW1lbnRzQnlEYXRlKGRvY3M6IFVwbG9hZGVkRG9jdW1lbnRbXSk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBVcGxvYWRlZERvY3VtZW50W10gfVtdIHtcbiAgICBjb25zdCBncm91cGVkVXBsb2FkZWREb2N1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgVXBsb2FkZWREb2N1bWVudFtdPigpO1xuXG4gICAgZG9jc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKGRvYyA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLl9nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhkb2MuaW5kZXhhdGlvblRpbWUpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgICAgaWYgKCFncm91cGVkVXBsb2FkZWREb2N1bWVudHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgICAgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5nZXQoZ3JvdXBLZXkpIS5wdXNoKGRvYyk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGltZUtleShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2RheShkYXRlKSkge1xuICAgICAgICByZXR1cm4gJ1RvZGF5JztcbiAgICB9IGVsc2UgaWYgKGlzWWVzdGVyZGF5KGRhdGUpKSB7XG4gICAgICAgIHJldHVybiAnWWVzdGVyZGF5JztcbiAgICB9IGVsc2UgaWYgKGlzVGhpc1dlZWsoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuICdUaGlzIHdlZWsnO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluRGF5cyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSA3KSB7XG4gICAgICByZXR1cm4gJ0xhc3Qgd2Vlayc7XG4gICAgfSBlbHNlIGlmIChpc1RoaXNNb250aChkYXRlKSkge1xuICAgICAgICByZXR1cm4gJ1RoaXMgbW9udGgnO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluTW9udGhzKGVuZE9mWWVzdGVyZGF5KCksIGRhdGUpIDw9IDEpIHtcbiAgICAgIHJldHVybiAnTGFzdCBtb250aCc7XG4gICAgfSBlbHNlIGlmIChpc1RoaXNRdWFydGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiAnVGhpcyBxdWFydGVyJztcbiAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbk1vbnRocyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSAzKSB7XG4gICAgICAgIHJldHVybiAnTGFzdCBxdWFydGVyJztcbiAgICB9IGVsc2UgaWYgKGlzVGhpc1llYXIoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuICdUaGlzIHllYXInO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluWWVhcnMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuICdMYXN0IHllYXInO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgJ3l5eXknKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiAqbmdJZj1cImRlbGV0aW5nQWxsXCI+XG4gIDxzcGFuPllvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFsbCB0aGUgZG9jdW1lbnRzLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZSA/PC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgdy0xMDBcIiAoY2xpY2spPVwiZGVsZXRpbmdBbGw9ZmFsc2VcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDBcIiAoY2xpY2spPVwicGVyZm9ybURlbGV0ZUFsbERvY3VtZW50cygpXCI+Q29uZmlybTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiAoZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCB8IGFzeW5jKVwiIGNsYXNzPVwidXBsb2FkZWQtZG9jc1wiPlxuICA8c3BhbiBjbGFzcz1cInVwbG9hZGVkLWRvY3MtZGF0ZVwiPnt7Z3JvdXAua2V5fX08L3NwYW4+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGRvYyBvZiBncm91cC52YWx1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZC1kb2MgcC0yXCI+XG4gICAgICA8c3EtZm9ybWF0LWljb24gW2V4dGVuc2lvbl09XCJkb2MuZmlsZUV4dFwiIGNsYXNzPVwibWUtMVwiPjwvc3EtZm9ybWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lLTFcIiBbc3FUb29sdGlwXT1cImRvYy5maWxlTmFtZVwiPnt7ZG9jLmZpbGVOYW1lfX08L3NwYW4+XG4gICAgICA8aSBjbGFzcz1cInVwbG9hZGVkLWRvYy1hY3Rpb25zIGZhcyBmYS10cmFzaCBtcy0xXCIgW3NxVG9vbHRpcF09XCInRGVsZXRlJ1wiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVEb2N1bWVudCgkZXZlbnQsIGRvYylcIj48L2k+ICBcbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCIgKm5nSWY9XCJkb2N1bWVudFRvRGVsZXRlICYmIGRvY3VtZW50VG9EZWxldGUuaWQgPT09IGRvYy5pZFwiPlxuICAgICAgPHNwYW4+WW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRvY3VtZW50IHt7ZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWV9fS4gRG8geW91IHdhbnQgdG8gY29udGludWUgPzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgdy0xMDBcIiAoY2xpY2spPVwiZG9jdW1lbnRUb0RlbGV0ZT11bmRlZmluZWRcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cInBlcmZvcm1EZWxldGVEb2N1bWVudCgpXCI+Q29uZmlybTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, EventEmitter, inject, Input, Output } from "@angular/core";
|
|
3
|
-
import { BehaviorSubject, catchError, EMPTY, filter, Subscription, switchMap, take, tap } from "rxjs";
|
|
4
|
-
import { LoginService } from "@sinequa/core/login";
|
|
5
|
-
import { NotificationsService } from "@sinequa/core/notification";
|
|
6
|
-
import { UtilsModule } from "@sinequa/components/utils";
|
|
7
|
-
import { AbstractFacet } from "@sinequa/components/facet";
|
|
8
|
-
import { Action } from "@sinequa/components/action";
|
|
9
|
-
import { ModalService, ModalModule } from "@sinequa/core/modal";
|
|
10
|
-
import { InstanceManagerService } from "../../instance-manager.service";
|
|
11
|
-
import { DocumentsUploadService } from "../documents-upload.service";
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/common";
|
|
14
|
-
export class DocumentOverviewComponent extends AbstractFacet {
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
this.disabledUpload = true;
|
|
18
|
-
this.onUpload = new EventEmitter();
|
|
19
|
-
this.uploadedDocuments$ = new BehaviorSubject([]);
|
|
20
|
-
this._subscription = new Subscription();
|
|
21
|
-
this._actions = [];
|
|
22
|
-
this._updateDocumentsListAction = new Action({
|
|
23
|
-
icon: 'fas fa-sync',
|
|
24
|
-
title: "Refresh",
|
|
25
|
-
action: () => this.updateUploadedDocumentsList()
|
|
26
|
-
});
|
|
27
|
-
this.loginService = inject(LoginService);
|
|
28
|
-
this.instanceManagerService = inject(InstanceManagerService);
|
|
29
|
-
this.documentsUploadService = inject(DocumentsUploadService);
|
|
30
|
-
this.notificationsService = inject(NotificationsService);
|
|
31
|
-
this.modalService = inject(ModalService);
|
|
32
|
-
this._actions = [this._updateDocumentsListAction];
|
|
33
|
-
}
|
|
34
|
-
;
|
|
35
|
-
ngOnInit() {
|
|
36
|
-
this._subscription.add(this.loginService.events
|
|
37
|
-
.pipe(filter((e) => e.type === "login-complete"), tap((_) => this.instantiateChatService()), switchMap((_) => this.chatService.assistantConfig$), filter((config) => !!config), tap((_) => this.documentsUploadService.init(this.chatService)), tap((_) => this.updateUploadedDocumentsList()), catchError((error) => {
|
|
38
|
-
console.error(error);
|
|
39
|
-
this.notificationsService.error(error);
|
|
40
|
-
return EMPTY;
|
|
41
|
-
}))
|
|
42
|
-
.subscribe());
|
|
43
|
-
}
|
|
44
|
-
ngOnDestroy() {
|
|
45
|
-
this._subscription.unsubscribe();
|
|
46
|
-
}
|
|
47
|
-
get actions() { return this._actions; }
|
|
48
|
-
instantiateChatService() {
|
|
49
|
-
this.chatService = this.instanceManagerService.getInstance(this.instanceId);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Updates the list of uploaded documents by fetching the latest data from the service.
|
|
53
|
-
*
|
|
54
|
-
* @returns {void}
|
|
55
|
-
*/
|
|
56
|
-
updateUploadedDocumentsList() {
|
|
57
|
-
this._subscription.add(this.documentsUploadService.getDocumentsList()
|
|
58
|
-
.pipe(tap((uploadedDocuments) => {
|
|
59
|
-
this.uploadedDocuments$.next(uploadedDocuments.docs);
|
|
60
|
-
}), catchError((error) => {
|
|
61
|
-
console.error(error);
|
|
62
|
-
this.notificationsService.error(error);
|
|
63
|
-
return EMPTY;
|
|
64
|
-
}), take(1))
|
|
65
|
-
.subscribe());
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
DocumentOverviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
69
|
-
DocumentOverviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { instanceId: "instanceId", disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UtilsModule }, { kind: "ngmodule", type: ModalModule }] });
|
|
70
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
|
|
71
|
-
type: Component,
|
|
72
|
-
args: [{ selector: "sq-document-overview", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, UtilsModule, ModalModule], template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
|
|
73
|
-
}], ctorParameters: function () { return []; }, propDecorators: { instanceId: [{
|
|
74
|
-
type: Input
|
|
75
|
-
}], disabledUpload: [{
|
|
76
|
-
type: Input
|
|
77
|
-
}], onUpload: [{
|
|
78
|
-
type: Output
|
|
79
|
-
}] } });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsc0JBQXNCLEVB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QUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDOztzSEFoRlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsOEtBVHpCLENBQUMsc0JBQXNCLENBQUMsaURDNUJyQyx3VkFLTSxnSER3Qk0sWUFBWSxtRkFBRSxXQUFXLDhCQUFFLFdBQVc7MkZBUXJDLHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxhQUNMLENBQUMsc0JBQXNCLENBQUMsV0FDMUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQzswRUFVeEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBmaWx0ZXIsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXBcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2xvZ2luXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL25vdGlmaWNhdGlvblwiO1xuaW1wb3J0IHsgVXRpbHNNb2R1bGUgfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy91dGlsc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RGYWNldCB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2ZhY2V0XCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy9hY3Rpb25cIjtcbmltcG9ydCB7IE1vZGFsU2VydmljZSwgTW9kYWxNb2R1bGUgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9tb2RhbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFVwbG9hZGVkRG9jdW1lbnQsIFVwbG9hZGVkRG9jdW1lbnRzIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LW92ZXJ2aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbRG9jdW1lbnRzVXBsb2FkU2VydmljZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFV0aWxzTW9kdWxlLCBNb2RhbE1vZHVsZV0sXG4gIHN0eWxlczogW2Bcbi5vdmVydmlldy10ZXh0IHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBwYWRkaW5nOiAuNXJlbSAuOHJlbTtcbn1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRPdmVydmlld0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmFjZXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWRVcGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBwdWJsaWMgdXBsb2FkZWREb2N1bWVudHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRlZERvY3VtZW50W10+KFtdKTs7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9hY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uID0gbmV3IEFjdGlvbih7XG4gICAgaWNvbjogJ2ZhcyBmYS1zeW5jJyxcbiAgICB0aXRsZTogXCJSZWZyZXNoXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpXG4gIH0pO1xuXG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSW5zdGFuY2VNYW5hZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9hY3Rpb25zID0gW3RoaXMuX3VwZGF0ZURvY3VtZW50c0xpc3RBY3Rpb25dO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudHlwZSA9PT0gXCJsb2dpbi1jb21wbGV0ZVwiKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zOyB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMgYnkgZmV0Y2hpbmcgdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHNlcnZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgdXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZ2V0RG9jdW1lbnRzTGlzdCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgodXBsb2FkZWREb2N1bWVudHM6IFVwbG9hZGVkRG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnRzJC5uZXh0KHVwbG9hZGVkRG9jdW1lbnRzLmRvY3MpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICA8c3BhbiBjbGFzcz1cIm92ZXJ2aWV3LXRleHQgZmxleC1ncm93LTFcIj57eyAodXBsb2FkZWREb2N1bWVudHMkIHwgYXN5bmMpPy5sZW5ndGggfHwgMCB9fSB1cGxvYWRlZCBkb2N1bWVudChzKTwvc3Bhbj5cbiAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiB0aXRsZT1cIlVwbG9hZCB0byBTb3VyY2VzXCIgKGNsaWNrKT1cIm9uVXBsb2FkLmVtaXQoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFVwbG9hZFwiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9kaXY+Il19
|