@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.
Files changed (151) hide show
  1. package/chat/charts/chart/chart.component.d.ts +13 -13
  2. package/chat/chat-message/chat-message.component.d.ts +85 -81
  3. package/chat/chat-message/i18n/en.json +11 -0
  4. package/chat/chat-message/i18n/fr.json +11 -0
  5. package/chat/chat-reference/chat-reference.component.d.ts +14 -14
  6. package/chat/chat-reference/i18n/en.json +4 -0
  7. package/chat/chat-reference/i18n/fr.json +4 -0
  8. package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +48 -50
  9. package/chat/chat-settings-v3/i18n/en.json +14 -0
  10. package/chat/chat-settings-v3/i18n/fr.json +14 -0
  11. package/chat/chat.component.d.ts +388 -1405
  12. package/chat/chat.service.d.ts +247 -228
  13. package/chat/debug-message/debug-message.component.d.ts +17 -17
  14. package/chat/debug-message/i18n/en.json +3 -0
  15. package/chat/debug-message/i18n/fr.json +3 -0
  16. package/chat/dialogs/delete-saved-chat.component.d.ts +22 -0
  17. package/chat/dialogs/i18n/en.json +19 -0
  18. package/chat/dialogs/i18n/fr.json +19 -0
  19. package/chat/dialogs/rename-saved-chat.component.d.ts +21 -0
  20. package/chat/dialogs/updates.component.d.ts +15 -0
  21. package/chat/documents-upload/document-list/document-list.component.d.ts +68 -77
  22. package/chat/documents-upload/document-overview/document-overview.component.d.ts +31 -41
  23. package/chat/documents-upload/document-upload/document-upload.component.d.ts +96 -98
  24. package/chat/documents-upload/documents-upload.model.d.ts +66 -66
  25. package/chat/documents-upload/documents-upload.service.d.ts +170 -174
  26. package/chat/documents-upload/i18n/en.json +24 -0
  27. package/chat/documents-upload/i18n/fr.json +24 -0
  28. package/chat/format-icon/format-icon.component.d.ts +10 -10
  29. package/chat/format-icon/icons.d.ts +5 -5
  30. package/chat/i18n/en.json +42 -0
  31. package/chat/i18n/fr.json +42 -0
  32. package/chat/index.d.ts +5 -5
  33. package/chat/initials-avatar/initials-avatar.component.d.ts +35 -35
  34. package/chat/instance-manager.service.d.ts +28 -28
  35. package/chat/pipes/message-content.pipe.d.ts +16 -0
  36. package/chat/prompt.component.d.ts +25 -21
  37. package/chat/public-api.d.ts +17 -17
  38. package/chat/references/i18n/en.json +6 -0
  39. package/chat/references/i18n/fr.json +6 -0
  40. package/chat/references/inline-image-reference.d.ts +21 -0
  41. package/chat/references/inline-page-reference.d.ts +21 -0
  42. package/chat/rest-chat.service.d.ts +31 -33
  43. package/chat/saved-chats/i18n/en.json +4 -0
  44. package/chat/saved-chats/i18n/fr.json +4 -0
  45. package/chat/saved-chats/saved-chats.component.d.ts +30 -36
  46. package/chat/services/app.service.d.ts +8 -0
  47. package/chat/services/dialog.service.d.ts +12 -0
  48. package/chat/services/notification.service.d.ts +10 -0
  49. package/chat/services/principal.service.d.ts +7 -0
  50. package/chat/services/search.service.d.ts +7 -0
  51. package/chat/services/signalR.web.service.d.ts +45 -0
  52. package/chat/services/ui.service.d.ts +13 -0
  53. package/chat/services/user-settings.service.d.ts +7 -0
  54. package/chat/token-progress-bar/i18n/en.json +4 -0
  55. package/chat/token-progress-bar/i18n/fr.json +4 -0
  56. package/chat/token-progress-bar/token-progress-bar.component.d.ts +24 -27
  57. package/chat/tooltip/tooltip.component.d.ts +12 -0
  58. package/chat/tooltip/tooltip.directive.d.ts +81 -0
  59. package/chat/types/message-content.types.d.ts +54 -0
  60. package/chat/types/message-reference.types.d.ts +11 -0
  61. package/chat/types.d.ts +913 -873
  62. package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +3 -0
  63. package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +3 -0
  64. package/chat/utils/assistant-json.d.ts +2 -0
  65. package/chat/websocket-chat.service.d.ts +102 -103
  66. package/esm2022/chat/charts/chart/chart.component.mjs +40 -0
  67. package/esm2022/chat/chat-message/chat-message.component.mjs +351 -0
  68. package/esm2022/chat/chat-reference/chat-reference.component.mjs +40 -0
  69. package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +118 -0
  70. package/esm2022/chat/chat.component.mjs +1090 -0
  71. package/esm2022/chat/chat.service.mjs +417 -0
  72. package/esm2022/chat/debug-message/debug-message.component.mjs +43 -0
  73. package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +81 -0
  74. package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +84 -0
  75. package/esm2022/chat/dialogs/updates.component.mjs +61 -0
  76. package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +140 -0
  77. package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +65 -0
  78. package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +256 -0
  79. package/{esm2020 → esm2022}/chat/documents-upload/documents-upload.model.mjs +1 -1
  80. package/esm2022/chat/documents-upload/documents-upload.service.mjs +291 -0
  81. package/{esm2020 → esm2022}/chat/format-icon/format-icon.component.mjs +23 -23
  82. package/{esm2020 → esm2022}/chat/format-icon/icons.mjs +137 -137
  83. package/{esm2020 → esm2022}/chat/initials-avatar/initials-avatar.component.mjs +60 -60
  84. package/esm2022/chat/instance-manager.service.mjs +46 -0
  85. package/esm2022/chat/pipes/message-content.pipe.mjs +34 -0
  86. package/esm2022/chat/prompt.component.mjs +88 -0
  87. package/{esm2020 → esm2022}/chat/public-api.mjs +18 -18
  88. package/esm2022/chat/references/inline-image-reference.mjs +110 -0
  89. package/esm2022/chat/references/inline-page-reference.mjs +110 -0
  90. package/esm2022/chat/rest-chat.service.mjs +296 -0
  91. package/esm2022/chat/saved-chats/saved-chats.component.mjs +82 -0
  92. package/esm2022/chat/services/app.service.mjs +19 -0
  93. package/esm2022/chat/services/dialog.service.mjs +40 -0
  94. package/esm2022/chat/services/notification.service.mjs +25 -0
  95. package/esm2022/chat/services/principal.service.mjs +16 -0
  96. package/esm2022/chat/services/search.service.mjs +13 -0
  97. package/esm2022/chat/services/signalR.web.service.mjs +79 -0
  98. package/esm2022/chat/services/ui.service.mjs +61 -0
  99. package/esm2022/chat/services/user-settings.service.mjs +22 -0
  100. package/{esm2020 → esm2022}/chat/sinequa-assistant-chat.mjs +4 -4
  101. package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +52 -0
  102. package/esm2022/chat/tooltip/tooltip.component.mjs +44 -0
  103. package/esm2022/chat/tooltip/tooltip.directive.mjs +203 -0
  104. package/esm2022/chat/types/message-content.types.mjs +2 -0
  105. package/esm2022/chat/types/message-reference.types.mjs +2 -0
  106. package/esm2022/chat/types.mjs +130 -0
  107. package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +57 -0
  108. package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +57 -0
  109. package/esm2022/chat/utils/assistant-json.mjs +12 -0
  110. package/esm2022/chat/websocket-chat.service.mjs +654 -0
  111. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  112. package/{esm2020 → esm2022}/sinequa-assistant.mjs +4 -4
  113. package/fesm2022/sinequa-assistant-chat.mjs +5340 -0
  114. package/fesm2022/sinequa-assistant-chat.mjs.map +1 -0
  115. package/{fesm2015 → fesm2022}/sinequa-assistant.mjs +3 -3
  116. package/index.d.ts +5 -5
  117. package/package.json +52 -25
  118. package/public-api.d.ts +1 -1
  119. package/chat/messages/de.d.ts +0 -4
  120. package/chat/messages/en.d.ts +0 -4
  121. package/chat/messages/fr.d.ts +0 -4
  122. package/chat/messages/index.d.ts +0 -4
  123. package/esm2020/chat/charts/chart/chart.component.mjs +0 -40
  124. package/esm2020/chat/chat-message/chat-message.component.mjs +0 -263
  125. package/esm2020/chat/chat-reference/chat-reference.component.mjs +0 -40
  126. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -117
  127. package/esm2020/chat/chat.component.mjs +0 -1069
  128. package/esm2020/chat/chat.service.mjs +0 -333
  129. package/esm2020/chat/debug-message/debug-message.component.mjs +0 -43
  130. package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +0 -191
  131. package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +0 -80
  132. package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +0 -258
  133. package/esm2020/chat/documents-upload/documents-upload.service.mjs +0 -289
  134. package/esm2020/chat/instance-manager.service.mjs +0 -46
  135. package/esm2020/chat/messages/de.mjs +0 -4
  136. package/esm2020/chat/messages/en.mjs +0 -4
  137. package/esm2020/chat/messages/fr.mjs +0 -4
  138. package/esm2020/chat/messages/index.mjs +0 -9
  139. package/esm2020/chat/prompt.component.mjs +0 -88
  140. package/esm2020/chat/rest-chat.service.mjs +0 -241
  141. package/esm2020/chat/saved-chats/saved-chats.component.mjs +0 -175
  142. package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +0 -54
  143. package/esm2020/chat/types.mjs +0 -112
  144. package/esm2020/chat/websocket-chat.service.mjs +0 -641
  145. package/fesm2015/sinequa-assistant-chat.mjs +0 -4200
  146. package/fesm2015/sinequa-assistant-chat.mjs.map +0 -1
  147. package/fesm2020/sinequa-assistant-chat.mjs +0 -4171
  148. package/fesm2020/sinequa-assistant-chat.mjs.map +0 -1
  149. package/fesm2020/sinequa-assistant.mjs +0 -9
  150. package/fesm2020/sinequa-assistant.mjs.map +0 -1
  151. /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